使用codemirror的简单模式

时间:2017-12-13 01:21:51

标签: javascript regex codemirror

我正在尝试创建一个允许Todo.txt格式的模式,这种格式非常简单,但在codemirror匹配结果时具有奇怪的正则表达式行为。

基本上,我试图用空格字符后面的“x”标记所有行,并且仅在行的开头处具有此条件,但正则表达式在行的中间拾取字符串。

在尝试使用其他javascript正则表达式工具时,我的正则表达式与此条件不匹配:https://regex101.com/r/kUXTqf/1

以下是来自简单模式定义的正则表达式行:

{regex: /^(x ).*$/, token: "task-completed"} 

我正在测试的文字:

x 2017-12-12 @geek add file location preference option +todotxtapp
(A) @geek completed task syntax highlighter rule needs tweak - it includes any character follows with whitespace - starting in the middle of the line +todotxtapp
(B) @geek design new app icon +todotxtapp
(C) @geek add priority shortcut cmd+up/down or similar +todotxtapp
asdasdasdasdasa x dsljhdsfkljg dhsklf sdaf

实际上,它只需匹配第一行。但它匹配第二行和最后一行的一半。 请在此处查看结果:http://take.ms/S2PEL

1 个答案:

答案 0 :(得分:3)

我不熟悉CodeMirror,但是不再使用文档,

  

简单模式(松散地基于通用JavaScript语法突出显示规范,从未起飞)是状态机,其中每个状态都有许多与令牌匹配的规则。

正则表达式不适用于行,它适用于令牌。因此,<s:element minOccurs="0" maxOccurs="1" default="true" name="optionalParam" type="s:boolean" /><s:element minOccurs="0" maxOccurs="1" default="true" name="optionalParam" type="s:boolean" />asdasdasdasdasa都是单独测试的;并且,毫不奇怪,x匹配dsljhdsfklhg

看起来你想要这样的东西(你可能需要调整它,因为我无法测试它):

x
  

/^(x ).*$/:boolean

     

如果为true,则此标记仅在行的开头匹配。 (由于JavaScript的RegExp API的限制,^ regexp标记在此上下文中不起作用。)

编辑:我必须说,我不太清楚{regex: /x/, token: "task-completed", sol: true} 发生了什么。