------------- test.htaファイルコード------------なぜこのjavascriptのRegExp構文が無限ループになりますか?
<!DOCTYPE html>
<html>
<head>
<title>dead</title>
</head>
<body>
txt<textarea id="content" >
<input name="" type="text" class="qu_te1n05ew" value="请输入您的E-mail地址" />
<input name="" type="submit" class="qu_sbt02" value="提 交" />
</textarea>
<button onclick="startCls();">start</button>
<script>
function getObj(id) {
return 'string' == typeof id ? document.getElementById(id) : id;
}
function startCls() {
var txt = getObj('content').value;
var srcRe = /<\w+(?:\s[^<>]*(?:(?:'[^']*')|(?:"[^"]*"))?[^<>]*)*\s+src\s*\=\s*["']?(?:[^"' <>]*\/)?([^\/"'<>]+\.(?:gif|jpg|png))['" ](?:\s[^<>]*(?:(?:'[^']*')|(?:"[^"]*"))?[^<>]*)*\/?>/ig;
alert(srcRe.exec(txt));
}
</script>
</body>
</html>
----------- -code-末尾-------
なぜsrcRe.exec(txt)
ループと死んでいるのですか?他のテスト文字列でも動作します。
srcRe
私の平均は、それがHTML tagname.haveではないので>
を終了していない、img
タグ名のsrcを取得し、ファイル名を取得するには、それを分割し、ないタグ名のsrcを得ることはありません、<b><img src="ss.gif" </b>
のようなものです。
このSYNAX (?:\s[^<>]*(?:(?:'[^']*')|(?:"[^"]*"))?[^<>]*)*
、平均値が<
または>
持っている場合、それは''
または""
でなければなりませんし、他の文字列がない<
または>
でなければなりません。そして>
によって<
、年末までに開始されます。
ここでは、二重投票が必要なコメントです。 – gideon
['TEXTAREA'](http://www.w3.org/TR/html4/interact/forms.html#edef-TEXTAREA)は、解析された文字データのみを許可しますが、他のマークアップは許可しません。 – Gumbo
申し訳ありませんが、あなたが正規表現を使用している人は、その結果に値するでしょう。それは私が数週間で見たコードの中で最も理解できない行です。私は強く、それはあなたが持っている問題を持っていない、より多くの読みやすく、維持可能な別の方法(実際のJSをそれを解析する)を行うことを提案します。 – jfriend00