正则表达式中的反向引用

时间:2016-11-17 14:16:24

标签: javascript regex backreference capturing-group

所以,我有一个像这样的JavaScript regexp:

/url:.?(['"])(https?:\/\/.*?)\1/

我用它在html / js代码中找到特定的url。如您所见,我在''""内捕获了链接。 这是一个问题,因为我不想获得像'http://'这样的链接。

/url:.?(['"])(https?:\/\/.+)\1/

这也会选择像'http://“+ d +'这样的东西,也不错。

我希望能在正则表达式中说出这样的话:

/(['"])(https?:\/\/[^\1]+)\1/

要使用[^ \ 1]而不是点,只能获取''或'“内的任何内容,确保它不会选择'http://”+ d +'

有没有办法做这样的事情?

1 个答案:

答案 0 :(得分:0)

请注意,[^\1]匹配除\x01字符之外的任何字符(SOH,标题开始)。这是因为在字符类中,\ +数字不能定义反向引用。参见ECMAScript reference

  

CharacterClass 中,\b表示退格字符,而\B和后向引用会引发错误。

实际上,如您所见,在JS实现中,\1类内的[...]构成了八进制转义符(请参见Using special characters)。

在您的情况下,您只想将'"之外的任何字符与[^'"]进行匹配,则无需检查以前匹配的限定符:

/(['"])(https?:\/\/[^'"]+)\1/

请参见regex demo

详细信息

  • (['"])-第1组:'"
  • (https?:\/\/[^'"]+)-第2组:http,可选的s://,1个或多个除'"以外的字符< / li>
  • \1-第1组的值。