所以,我有一个像这样的JavaScript regexp:
/url:.?(['"])(https?:\/\/.*?)\1/
我用它在html / js代码中找到特定的url。如您所见,我在''
或""
内捕获了链接。
这是一个问题,因为我不想获得像'http://'这样的链接。
/url:.?(['"])(https?:\/\/.+)\1/
这也会选择像'http://“+ d +'这样的东西,也不错。
我希望能在正则表达式中说出这样的话:
/(['"])(https?:\/\/[^\1]+)\1/
要使用[^ \ 1]而不是点,只能获取''或'“内的任何内容,确保它不会选择'http://”+ d +'
有没有办法做这样的事情?
答案 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组的值。