代码镜像:使用正则表达式

时间:2014-10-28 11:04:33

标签: javascript regex codemirror codemirror-modes

我正在尝试在代码镜像中使用正则表达式作为简单模式。

我测试它的最小代码:

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,所以我可能会遗漏一些明显的东西。

2 个答案:

答案 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”。

因此,在不满足正则表达式的情况下推进流是有意义的,这解释了为什么使用^如果建议。