我正在研究一种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>");
如何判断它的替换内容,以便在关键字之间插入关键字?
答案 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。 (通过删除显式编译正则表达式的行,可以很容易地修复此错误。)
*另外,看看谷歌美化(如果我没有弄错的话,这个网站会使用)。