正则表达式组与空间匹配

彼德

我对正则表达式有简单的问题,但是我不知道要解决它们。我有字符串(灰色为标签):

cccc:ddddd bbbb:fgggg aaa aa:ddd ddd cccc: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 aabbbbcccc
  • : -文字冒号
  • (.*?) -第2组匹配0+除换行符以外的任何其他字符,直到第一个字符都尽可能少...
  • (?=$|\s+(?:aaa aa|bbbb|cccc))-(限制.*?匹配的正向前瞻
    • $ -...字符串的结尾
    • | - 或者...
    • \s+ -一个或多个空格,后跟...
      • (?:aaa aa|bbbb|cccc) -三种选择中的任何一种(在非捕获组中,仅用于分组而不是捕获)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式组与空间匹配

来自分类Dev

正则表达式与空间匹配

来自分类Dev

正则表达式匹配组

来自分类Dev

正则表达式匹配之间的空间以及匹配?

来自分类Dev

正则表达式如何匹配匹配的组

来自分类Dev

在捕获的组正则表达式上修剪空间

来自分类Dev

在捕获的组正则表达式上修剪空间

来自分类Dev

Python正则表达式仅匹配空间

来自分类Dev

正则表达式匹配,如果找不到空间

来自分类Dev

正则表达式匹配的领先空间

来自分类Dev

不遵循正则表达式匹配空间的单词

来自分类Dev

正则表达式匹配标点空间但保留标点

来自分类Dev

正则表达式-单引号之间的匹配空间

来自分类Dev

正则表达式匹配的领先空间

来自分类Dev

不遵循正则表达式匹配空间的单词

来自分类Dev

正则表达式匹配空间与否

来自分类Dev

如何合并正则表达式组匹配?

来自分类Dev

Swift正则表达式-如何提取匹配的组

来自分类Dev

复杂正则表达式与捕获组匹配

来自分类Dev

正则表达式匹配JavaScript中的反向组

来自分类Dev

正则表达式以匹配书名-组

来自分类Dev

带可选匹配组的正则表达式

来自分类Dev

组1不匹配每个正则表达式

来自分类Dev

正则表达式匹配多个组

来自分类Dev

如何遍历正则表达式的匹配组

来自分类Dev

JavaScript正则表达式全局匹配组

来自分类Dev

正则表达式与特殊字符组匹配

来自分类Dev

如何告诉正则表达式不匹配组?

来自分类Dev

确定正则表达式中匹配的组