这两个正则表达式有何不同?它们是否可以互换使用?
我已经修改过的代码,将其替换为
((?:[^\"])*)
([^\"]*)
这个问题的背景:
JavaScript所使用的所见即所得编辑器(tinymce)无法在Firefox(23.0.1和25.0a2版本)中解析我的HTML代码,但在Chrome中可以。
我发现这是由于正则表达式导致的:
attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;
我已经修改过的代码,将其替换为
((?:[^\"])*)
使用
([^\"]*)
and
((?:[^\'])*)
使用
([^\']*)
我的测试用例中,生成的正则表达式在两个浏览器中都能正常工作。
attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"([^\"]*)\")|(?:\'([^\']*)\')|([^>\s]+)))?/g
能有人解释一下吗?
我的测试数据是一个大于700kb的图片,只有使用修改后的正则表达式才能正常工作:
var testdata = '<img alt="" src="data:image/jpeg;base64,/9j/4AAQSkZJRgA...5PmDk4FOGOHy6S3JW120W1uCJ5M0PBa54edOFAc8ePX/2Q==">'
做这样的测试:
testdata.match(attrRegExp);
特别是当测试数据很大时,未修改的正则表达式在Firefox中很可能会失败。
您可以在这里找到jsfiddle示例:
"
而不是\"
(以及'
而不是\'
)时,您是否看到任何区别? - Tim Pietzcker