我想在codemirror中为特定颜色的 / * * / 之间的注释添加颜色...我搜索并找到样本为"之间的字符串着色。 " ,它运作良好。
当我更换" " 在代码中 / * * / ,然后代码不会为我的评论着色。
工作代码是:
CodeMirror.defineMode("strings", function() {
return {
startState: function() {return {inString: false};},
token: function(stream, state) {
// If a string starts here
if (!state.inString && stream.peek() == '"') {
stream.next(); // Skip quote
state.inString = true; // Update state
}
if (state.inString) {
if (stream.skipTo('"')) { // Quote found on this line
stream.next(); // Skip quote
state.inString = false; // Clear flag
} else {
stream.skipToEnd(); // Rest of line is string
}
return "string"; // Token style
} else {
stream.skipTo('"') || stream.skipToEnd();
return null; // Unstyled token
}
}
};
});
我的尝试: 注意我只能将" 替换为 / 和" 的 / 但代码不起作用 这是我的在线试用jsbin but not work
那我错了什么?
答案 0 :(得分:1)
如documentation中所述,
peek()→string
返回流中的下一个字符而不推进它。将在行尾返回null。
stream.peek()
只返回1个字符,您要匹配"/*"
,即2个字符。
您想使用stream.match()
匹配(pattern:string,?consume:boolean,?caseFold:boolean)→boolean
匹配(模式:regexp,?消耗:布尔值)→数组就像一个多角色吃 - 如果消费是真的或没有给出 - 或者是一个没有更新流位置的前瞻 - 如果它是假的。 pattern可以是字符串,也可以是以^开头的正则表达式。当它是一个字符串时,caseFold可以设置为true以使匹配不区分大小写。成功匹配正则表达式后,返回的值将是匹配返回的数组,以防您需要提取匹配的组。
如果当前流位置与true
匹配并且将吃掉2个字符,则会返回"/*"
:
stream.match('/*', true)