假设有这样的代码:
ab cd
ef gh
ij kl
mn
我想突出显示行头的所有字词:ab
ef
ij
(是的,我们有缩进)mn
,如何编写regex:
?
我尝试了http://ace.c9.io/tool/mode_creator.html,但/^\s*/
/\n/
未按预期工作。它们实际上是如何工作的?
答案 0 :(得分:2)
Ace连接组中规则中的所有正则表达式。 所以如果你有一个像
这样的小组 [{token: .., regex: "regex1"}, {token: .., regex: /regex2/}, {defaultToken: ..}]
结果正则表达式为/(regex1)(regex2)($)/
(参见here)
文档中的每一行都重复匹配生成的正则表达式,并为每个匹配标记创建相应规则的类型。对于不匹配的文本,使用defaultToken。
由于正则表达式在规则中逐行匹配/\n/
将无法匹配任何内容。
关于你的第一个问题,我认为{token : "comment", regex : "^\\s*\\w+"}
应该有用。
答案 1 :(得分:1)
这是我的解决方案,我必须将/^\s*/
放在parameter
之前,然后才有效。
this.$rules = {
start: [{
token: 'support.function',
regex: /[^\(\)\"\s]+/,
next: 'line'
}],
line: [{
token: 'markup.raw',
regex: /^\s*/,
next: 'start',
}, {
token: 'variable.parameter',
regex: /[^\(\)\"\s]+/
}, {
token: 'markup.raw',
regex: /^\ */,
next: 'start',
}]
}
此处的完整代码: https://github.com/Cirru/ace/blob/master/lib/ace/mode/cirru_highlight_rules.js