这个正则表达式是可替换的有什么区别?
((?:[^\"])*)
([^\"]*)
这个问题的背景:
javascript WYSIWYG 编辑器(tinymce)无法在 Firefox(23.0.1 和 25.0a2)中解析我的 html 代码,但可以在 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 示例: