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