6

この正規表現の違いは何ですか?

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


([^\"]*)

この質問の背景:

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の例を見つけることができます:

4

1 に答える 1