在Javascript中替换(?< = exp)?

时间:2012-10-04 12:25:46

标签: javascript regex

我读了一些关于正则表达式的教程,我看到了一句话:

  

(?< = exp):匹配前缀exp

之后的任何位置

例如,我有一些字符串:

  

共享

     

护理

如果我想查找所有字符串包含“are”,但“are”必须跟随“Sh”:/(?<=Sh)are/i。现在只有“分享”匹配,匹配的索引是2(匹配“是”,而不是“分享”来自“分享”)。

但Javascript没有这个正则表达式。我怎么能在Javascript中这样做?

谢谢!

4 个答案:

答案 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开头的子字符串。