在Javascript中突出显示语法

时间:2011-07-26 16:40:17

标签: javascript objective-c regex syntax-highlighting textmate

我目前正在使用Javascript语法突出显示。

为了匹配字符串,我会使用这样的东西:
code = code.replace(/("([^"\\]*(\\.[^"\\]*)*)")/gm, "<span class=\"string\">$1</span>"); // string

这将匹配一个整数:
code = code.replace(/(\d+)/gm, "<span class=\"number\">$1</span>");

现在我的问题是字符串中的整数也会匹配。这不是突出而是性能的问题,因为我可以使用
code > span.number代替code span.number 有关防止这种行为的任何建议吗?


我还阅读TextMate's Language Grammars,这对我来说似乎非常强大。但是,我不知道如何在Javascript中实现它 真的很感激一些帮助。


我知道有许多优秀的语法突出显示,但没有一个能为Objective-C提供真正好的支持。

2 个答案:

答案 0 :(得分:5)

如果您想为Google Code Prettify编写一个Objective-C模式,我很乐意将其合并。

您可以在http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-ml.js

查看OCAML / SML样式语言的示例模式

这样的行
[PR['PR_STRING'],
 /^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])(?:\'|$))/, null, '"\'']

说这是字符串的突出显示规则,字符串匹配上面的正则表达式(双引号内的非引号或转义序列或单引号内的非单引号或转义序列)

此规则

[PR['PR_LITERAL'],
 /^[+\-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],

匹配数字文字。数字文字是一个可选的符号,后跟一个十六进制文字,一个点后跟一个分数,或一个整数部分后跟一个分数,最后两个可以在末尾有一个可选的指数。

代码美化引擎负责确保将字符串视为字符串,并且字符串内部的数字看起来不会被误认为数字。

答案 1 :(得分:0)

也许你想看看Alex Gorbachev的SyntaxHighlighter。 Theres目前没有Objective C的模块,但他提供manual来开发“自定义画笔”。