我正在尝试在代码镜像中使用正则表达式作为简单模式。
我测试它的最小代码:
CodeMirror.defineMode("regex", function() {
return {
token: function(stream, state) {
console.log(stream);
a = stream.match(/word/);
console.log(a);
stream.skipToEnd();
return null;
}
};
});
第一遍的输出是:
Object { start: 74, pos: 74, string: "This is a sentence with word and key in it, and word and key are repeated.", tabSize: 4, lastColumnValue: 0, lastColumnPos: 0, lineStart: 0 } regex.js:5
null
如果我使用字符串" word"而不是正则表达式,它记录" undefined"而不是" null"。
代码镜像(http://codemirror.net/doc/manual.html)的文档说(函数匹配):
pattern可以是字符串,也可以是以^
开头的正则表达式
我不清楚(^表示'不是'正则表达式?)
这是我第一次使用codemirror,正则表达式和javascript,所以我可能会遗漏一些明显的东西。
答案 0 :(得分:0)
我认为它是^word
。^
称为起始锚点,它指的是行开头而$
指的是行尾。如果^
出现在字符类[]
的开头,那么它表示列表中给定字符的否定。
示例:[^:]
- 匹配任何字符,但不匹配:
答案 1 :(得分:0)
好的,明白了
a = stream.match(/word/);
检查流的当前位置的正则表达式,即流是否在开头:
"This is a sentence with word and key in it, and word and key are repeated."
然后它只检查第一个字母,将停在“T”,因为它与正则表达式不匹配并返回“null”。
因此,在不满足正则表达式的情况下推进流是有意义的,这解释了为什么使用^如果建议。