gpt4 book ai didi

javascript - ((?:[^\"])*) and ([^\"]*) 之间的正则表达式差异

转载 作者:数据小太阳 更新时间:2023-10-29 05:23:08 24 4
gpt4 key购买 nike

这个正则表达式是可替换的有什么区别?

((?:[^\"])*)


([^\"]*)

这个问题的背景:

javascript 所见即所得编辑器 (tinymce) 无法解析我的 html 代码在 Firefox(23.0.1 和 25.0a2)中,但在 Chrome 中工作。

我发现正则表达式是罪魁祸首:

attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;

我修改,替换

((?:[^\"])*) 

([^\"]*)

((?:[^\'])*) 

([^\']*)

生成的正则表达式在我的测试用例的两个浏览器中均有效

attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"([^\"]*)\")|(?:\'([^\']*)\')|([^>\s]+)))?/g

有人可以解释一下吗?

我的测试数据仅适用于修改后的正则表达式,是一张 >700 kb 的大图像:

var testdata = '<img alt="" src="data:image/jpeg;base64,/9j/4AAQSkZJRgA...5PmDk4FOGOHy6S3JW120W1uCJ5M0PBa54edOFAc8ePX/2Q==">'

做类似的事情来测试:

testdata.match(attrRegExp);

尤其是当测试数据很大时,未修改的正则表达式很可能在 firefox 中失败。

您可以找到 jsfiddle example here :

最佳答案

结果应该没有区别。所以你应该没问题。

但是,RegExp 引擎处理这两个表达式的方式可能存在很大差异,对于 Firefox/Safari,您刚刚证明确实存在 ;)

Firefox 使用 WebKit/JavaScriptCore YARR。YARR 强加了一个任意的 artificial limit ,它命中非捕获组变体

// The below limit restricts the number of "recursive" match calls in order to
// avoid spending exponential time on complex regular expressions.
static const unsigned matchLimit = 1000000;

因此 Safari 也会受到影响。

参见相关Webkit bug及相关Firefox bugnice test case比较某人放在一起的不同表达类型。

关于javascript - ((?:[^\"])*) and ([^\"]*) 之间的正则表达式差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18787191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com