我正在研究一个RegExp并发现如果该字符串包含dash aa-bb.js
和查询字符串部分m=123
,它将导致浏览器崩溃,除了不是最好的正则表达式为此,我想知道为什么它适用于https://example.org/aa.js
而不适用于https://example.org/js/aa-bb.js?m=123
var re = /src=[\'|\"]([ -0-9a-zA-Z:]*[ 0-9a-zA-Z;]*)*[\'|\"]/g;
var result = re.exec("<script src='https://example.org/js/aa-bb.js?m=123'></script>");
console.log(result)
答案 0 :(得分:1)
除了你的正则表达式还有其他问题,
你的错误就是这个(这可能导致崩溃):
Error: Regex Construction ..
Invalid range end in character class
src= [\'|\"]
( # (1 start)
[ -0-<<<HERE>>>9a-zA-Z:]*
[ 0-9a-zA-Z;]*
)* # (1 end)
[\'|\"]
在类中,范围<space> to 0
,然后是没有起始字符的范围运算符。
其他问题:
此字符类[\'|\"]
中包含一个替换字面值
你打算这样吗?
此外,您可以选择量化可选量词而不指定
非可选。<
如果你的课程内容重叠,那么这真的很糟糕
这是回溯溢出的一个秘诀。
示例([abcD]*[abc]*)*
总的来说,您可能需要的正则表达式为src=(['"])(?:(?!\1)[\S\s])*\1