0

次のコードを使用して、pre 要素内のすべての javadoc コメントを検出し、選択した色に置き換えました。

<script type="text/javascript">
    var arr = document.getElementsByTagName("pre");
    for (var i=0; i<arr.length; i++){
        arr[i].innerHTML = arr[i].innerHTML.replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;');
        arr[i].innerHTML = arr[i].innerHTML.replace(/</g, '&lt;');
        arr[i].innerHTML = arr[i].innerHTML.replace(/>/g, '&gt;');
        arr[i].innerHTML = arr[i].innerHTML.replace(/\\/*\*\*([^\*]|\*(?!/))*\\*/g, '<font color="#3F5FBF">' + $& + '</font>');
    }
</script>

しかし、それは私に次のエラーを与えます。

Uncaught SyntaxError: Unexpected token ILLEGAL 

編集:コードをに変更

<script type="text/javascript">
var arr = document.getElementsByTagName("pre");
for (var i=0; i<arr.length; i++){
    arr[i].innerHTML = arr[i].innerHTML.replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;');
    arr[i].innerHTML = arr[i].innerHTML.replace(/</g, '&lt;');
    arr[i].innerHTML = arr[i].innerHTML.replace(/>/g, '&gt;');
    var reg = /\\\/*\*\*([^\*]|\*(?!\/))*\\*/;
    var cds = arr[i].innerHTML.match(reg);
    for (var j=0; j<cds.length; j++){
        arr[i].innerHTML = arr[i].innerHTML.replace(cds[j], '<font color="#3F5FBF">' + cds[j] + '</font>'); 
    }
}
prettyPrint();
</script>

しかし、エラーは次のように変わります

Uncaught TypeError: Cannot read property 'length' of null start-ahead.html:234

(匿名関数)

4

2 に答える 2

4

問題はここにあります。を使用してから/\\/*\*\*([^\*]|\*(?!/))*\\*/gを使用した場合です。プログラムは、正規表現がこのようなものであり、その後に続くものがエラーになることを理解しています。この正規表現を試してください:\\//\\/

/\/*\*\*([^\*]|\*(?!\/))*\\*/g

または、必要に応じて:

/\\\/*\*\*([^\*]|\*(?!\/))*\\*/g
于 2012-05-30T01:16:45.427 に答える
1

このreplace()メソッドには、2番目のパラメーターとして文字列が必要です。キャプチャに置き換えるパターンは、その文字列に含まれている必要があります。

2つの文字列リテラルと" $&"という名前の変数からその文字列を構築しようとします。ただし、これは不正な名前です。 " &"はビット単位のAND演算子であり、その後に " " --SyntaxErrorが続くため、2番目のオペランドがありません。+恐ろしいランタイムエラーが発生します。

また、@ FelixKlingが述べたように、正規表現はひどくエスケープされています。のようなものになるはずですがnew Regexp("\\/*\*\*([^\*]|\*(?!/))*\\*", "g")、それでも役に立たないバックスラッシュがいくつかありました。何にアプローチしたいですか?それ/\*{3}([^*]|\*(?!\/))\**/gですか?

于 2012-05-30T01:16:36.303 に答える