0

使用 JavaScript,我正在寻找其他两个字符串中的文本,而不包括这些字符串。例如:

输入:ONE example TWO

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

火柴:ONE example

我想:example

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

4

2 回答 2

1

啊哈!我想到了。

例如,这里是如何在没有括号的情况下获取括号内的文本

(?<=\().+(?=\))

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

我的部分困惑是javascript的错。它显然不支持原生的“lookbehinds”。我发现了这个解决方法:http: //blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

于 2012-05-29T17:35:27.797 回答
0

(我使用 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 '
于 2012-05-29T17:30:07.803 回答