我对正则表达式有简单的问题,但是我不知道要解决它们。我有字符串(灰色为标签):
cccc
:dddddbbbb
:fggggaaa aa
:ddd dddcccc
:ggggggg
和正则表达式
/(aaa aa|bbbb|cccc)+:([\sa-zA-Z]*)(?:$|\s)/ig
https://regex101.com/r/mR3vK5/1
解析字符串后,'label'aaa aa
被忽略,因为有空格并被带到第二个匹配项。我想在插入第二个匹配项到下一个“标签”或结束行后,先匹配标签(是否带空格),冒号和任何内容(带空格)。
有什么建议?
如果您知道所有键,则可以在正向前行中使用它们,并将值与惰性点匹配:
/(aaa aa|bbbb|cccc):(.*?)(?=$|\s+(?:aaa aa|bbbb|cccc))/gi
参见JS演示:
var block = "aaa aa|bbbb|cccc";
var rx = RegExp("(" + block + "):(.*?)(?=$|\\s+(?:" + block + "))", "ig");
var s = "cccc:ddddd bbbb:fgggg aaa aa:ddd ddd cccc:ggggggg";
while ((m = rx.exec(s)) !== null) {
document.body.innerHTML += m[1] + ": " + m[2] + "<br/>";
}
模式说明:
(aaa aa|bbbb|cccc)
-aaa aa
或bbbb
或cccc
:
-文字冒号(.*?)
-第2组匹配0+除换行符以外的任何其他字符,直到第一个字符都尽可能少...(?=$|\s+(?:aaa aa|bbbb|cccc))
-(限制.*?
匹配的正向前瞻)
$
-...字符串的结尾|
- 或者...\s+
-一个或多个空格,后跟...
(?:aaa aa|bbbb|cccc)
-三种选择中的任何一种(在非捕获组中,仅用于分组而不是捕获)本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句