我读了一些关于正则表达式的教程,我看到了一句话:
(?< = exp):匹配前缀exp
之后的任何位置
例如,我有一些字符串:
共享
护理
如果我想查找所有字符串包含“are”,但“are”必须跟随“Sh”:/(?<=Sh)are/i
。现在只有“分享”匹配,匹配的索引是2(匹配“是”,而不是“分享”来自“分享”)。
但Javascript没有这个正则表达式。我怎么能在Javascript中这样做?
谢谢!
答案 0 :(得分:3)
你不能这样做。在Javascript的正则表达式实现中没有lookbehind断言。
<强>替代强>
在某些情况下,您可以使用分组来捕捉您真正想要匹配的内容:/Sh(are)/i
如果你真的需要lookbehinds,你可以使用第三方正则表达式库。
相关强>
答案 1 :(得分:2)
唯一的方法(当然,只有在正则表达式中没有前瞻断言时才有效)是反转字符串并使用前瞻而不是向后看:
/era(?=hS)/i
答案 2 :(得分:0)
您可以使用non capturing groups
/(?:sh)(are)/
这告诉正则表达式在没有捕获are
组的情况下找到sh
。但是在这种情况下,由于您有一个匹配的简单模式,这不是必需的,您可以在其他解决方案中找到答案,并执行类似
/sh(are)/
然后仅匹配第一组
答案 3 :(得分:0)
如果我很清楚我会使用这个正则表达式
/(Sh|\b)(are)/gi
其中are
只能是一个单词或以Sh
开头的子字符串。