JavaScript RegExp:我要替换什么?

时间:2011-03-12 01:11:20

标签: javascript regex

我正在研究一种JavaScript语法荧光笔,我需要一个项目,我将在稍后开始。

我有一个名为keywords的表达式。

var keywords = /break|case|catch|default|delete|do|else|false|for|function|if|in|instanceof|new|null|prototype|return|switch|throw|this|true|try|typeof|var|while|with/g

然后我运行script.replace(keywords, "<keyword>" + /* I have no idea what to put here. */ + "</keyword>");

如何判断它的替换内容,以便在关键字之间插入关键字?

2 个答案:

答案 0 :(得分:4)

如果将模式包装在括号中,则正则表达式将捕获它以供您在替换模式中使用。在这种情况下,您可以:

var keywords = /(break|case|catch|default|delete|do|else|false|for|function|if|in|instanceof|new|null|prototype|return|switch|throw|this|true|try|typeof|var|while|with)/g;
var script = 'return 1';
script.replace(keywords, "<keyword>$1</keyword>");

您捕获的每个模式在替换模式中均可用作$1$2$3等。

答案 1 :(得分:2)

或者你可以这样做:

var keywords = /break|case|catch|default|delete|do|else|false|for|function|if|in|instanceof|new|null|prototype|return|switch|throw|this|true|try|typeof|var|while|with/g;
var script = 'return 1';
script.replace(keywords, "<keyword>$&</keyword>");

也就是说,在这种简单的情况下,您不需要使用捕获括号。特殊标记:$&返回整个正则表达式匹配的文本。 (在其他语言中,这经常被指定为:$0 - 即捕获组。)您可以在Javascript string.replace字符串中使用几个特殊标记:

    $1, $2, $3,...$99  The text matching capture groups 1-99.
    $&                 The substring that matched the whole regex.
    $`                 The text to the left of the matched substring.
    $'                 The text to the right of the matched substring.
    $$                 A literal dollar sign

摘自David Flanagan的“Javascript:The Definitive Guide(5th Edition)”。强烈推荐这个优秀的Javascript参考(并且还有一个new revision about to come out - 是的!)

关于Javascript语法突出显示......我最近一直在研究这个问题并提出一些建议:
*最受欢迎的是SyntaxHighlighter。然而,我最近在其核心发现了一个令人讨厌的错误,并写了一篇关于它的文章:Fixing the SyntaxHighlighter 3.0.83 Parser Bug
*另外,请看看Matt Might的McLexer/McHighlighter。 (这家伙很聪明)。虽然这个在Opera下运行时也有一个bug。 (通过删除显式编译正则表达式的行,可以很容易地修复此错误。)
*另外,看看谷歌美化(如果我没有弄错的话,这个网站会使用)。