この正規表現の違いは何ですか?
((?:[^\"])*)
([^\"]*)
この質問の背景:
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の例を見つけることができます: