0

我正在尝试将正则表达式用于代码镜像中的简单模式。

我测试它的最小代码:

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)说(功能匹配):

模式可以是字符串或以 ^ 开头的正则表达式

我不清楚(^ 表示正则表达式的“不”?)

这是我第一次使用 codemirror、正则表达式和 javascript,所以我可能会遗漏一些明显的东西。

4

2 回答 2

0

我认为是^word^称为起始锚点,它指的是行的开始和行$的结束。如果^出现在字符类的开头,[]则它表示列表中给定字符的否定。

示例:[^:]- 匹配任何字符,但不匹配 of:

于 2014-10-28T11:07:02.430 回答
0

好的,我知道了

a = stream.match(/word/);

检查流当前位置的正则表达式,即流是否位于以下位置的开头:

"This is a sentence with word and key in it, and word and key are repeated."

然后它将仅检查第一个字母,将在“T”处停止,因为它与正则表达式不匹配并返回“null”。

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

于 2014-11-04T03:16:40.413 回答