使用 JavaScript,我正在寻找其他两个字符串中的文本,而不包括这些字符串。例如:
输入:ONE example TWO
正则表达式:(?=ONE).+(?=TWO)
火柴:ONE example
我想:example
我真的很惊讶问号(应该只在查询中包含该字符串而不是结果)在字符串的末尾起作用,而不是在开头。
使用 JavaScript,我正在寻找其他两个字符串中的文本,而不包括这些字符串。例如:
输入:ONE example TWO
正则表达式:(?=ONE).+(?=TWO)
火柴:ONE example
我想:example
我真的很惊讶问号(应该只在查询中包含该字符串而不是结果)在字符串的末尾起作用,而不是在开头。
啊哈!我想到了。
例如,这里是如何在没有括号的情况下获取括号内的文本
(?<=\().+(?=\))
这是一个很好的参考:http ://www.regular-expressions.info/lookaround.html
我的部分困惑是javascript的错。它显然不支持原生的“lookbehinds”。我发现了这个解决方法:http: //blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
(我使用 Python 的re
模块来展示示例——具体如何执行取决于您的正则表达式实现 [例如,有些没有组——或反向引用])
对第一个断言使用后向断言,而不是前向断言。
>>> re.search(r"(?<=ONE).+(?=TWO)", "ONE x a b TWO").group()
' x a b '
问题是零宽度断言(?=ONE)
与文本“ONE”匹配,但不“使用”它——即它只是检查它是否存在,但保留字符串原样。然后.+
开始阅读文本,并消耗它。
向后断言不向前看,它们向后看,所以在它后面的东西是“一”.+
之前不会运行。
最好不要理会这些,而是使用组。考虑:
>>> re.search(r"ONE(.+)TWO", "ONE x a b TWO").group(1)
' x a b '