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()方法需要一个字符串作为第二个参数。其中要替换为捕获的模式需要在该字符串中。

您尝试使用两个字符串文字和一个名为“ $&”的变量来构建该字符串。然而,这是一个非法的名称——“ &”是一个按位与运算符并且缺少第二个操作数,因为它后面跟着“ +”——SyntaxError。会产生可怕的运行时错误。

此外,正如@FelixKling 提到的,您的正则表达式被严重转义。它可能应该是类似的东西new Regexp("\\/*\*\*([^\*]|\*(?!/))*\\*", "g"),但是有一些无用的反斜杠。你想接近什么?是/\*{3}([^*]|\*(?!\/))\**/g吗?

于 2012-05-30T01:16:36.303 回答