正则表达式内部内容

RegEx inner content

本文关键字:内部 正则表达式      更新时间:2023-09-26

使用JavaScript,我希望在不包含这些字符串的情况下精确定位其他两个字符串中的文本。例如:

输入:ONE example TWO

正则表达式:(?=ONE).+(?=TWO)

比赛: ONE example

我要:example

我真的很惊讶问号(应该只在查询中包含该字符串而不是结果)适用于字符串的末尾,但不适用于开头。

啊哈!我想通了。

例如,下面介绍如何获取括号内不带括号

的文本
(?<='().+(?='))

这里有一个很好的参考:http://www.regular-expressions.info/lookaround.html

我的困惑部分是javascript的错。它显然不支持原生的"回溯"。不过,我发现了这种解决方法: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"匹配,但不"消费"它 - 即它只是检查它是否存在,但保持字符串不变。然后.+开始阅读文本,并确实使用它。

后的断言不会向前看,而是向后看,所以.+直到它后面的东西都是"ONE"时才被运行。


最好不要打扰这些,而是使用组。考虑:

>>> re.search(r"ONE(.+)TWO", "ONE x a b TWO").group(1)
' x a b '