匹配第一场比赛的更改版本只有一个表达式?
我正在为Alex Gorbatchev的Syntax Highlighter写一个画笔来强调Smalltalk代码。现在,考虑以下Smalltalk代码:
aCollection do: [ :each | each shout ]
我想找到块参数“:each”,然后在每次出现之后匹配“each”(为简单起见,让我们说每次出现不仅仅在括号内)。
请注意,参数可以具有任何名称,例如“:myArg”。
我尝试匹配“:each”:
:([dw]+)
这似乎有效。问题是我匹配“每个”的出现。我认为这样的事情可行:
:([dw]+)|1
但是,交替的右侧似乎被视为一个独立的表达,因此反向引用不起作用。
甚至可以在单个表达式中完成我想要的东西吗?或者我是否必须在第二个表达式中使用反向引用(通过另一个函数调用)?
没有找到相关结果
已邀请:
2 个回复
臀博
。但JavaScript根本不支持lookbehind。 但无论如何这个正则表达式效率非常低(我刚刚在RegexBuddy中检查了一个简单的例子,正则表达式引擎需要超过60个步骤才能在文档中的几乎每个字符之间决定匹配和不匹配),所以这不是一个好主意如果你想用它来代码突出显示。 我建议你使用你提到的两步法:首先匹配
(为了安全插入字边界,
隐含在
),然后搜索匹配结果
。
犯痪桂涛杭