Javascript 仅用一个表达式匹配第一个匹配的更改版本?

Javascript 仅用一个表达式匹配第一个匹配的更改版本?,javascript,regex,backreference,regex-alternation,Javascript,Regex,Backreference,Regex Alternation,我正在为Alex Gorbatchev的语法Highlighter编写一个画笔,以突出显示Smalltalk代码。现在,考虑下面的SimalTalk代码: aCollection do: [ :each | each shout ] 我想找到block参数:each,然后每次匹配,为了简单起见,让我们假设每次出现,而不仅仅是在括号内。 请注意,参数可以有任何名称,例如:myArg 我的匹配尝试:每个: \:([\d\w]+) 这似乎奏效了。问题是我要匹配每个事件的发生。我认为这样的方法可以奏

我正在为Alex Gorbatchev的语法Highlighter编写一个画笔,以突出显示Smalltalk代码。现在,考虑下面的SimalTalk代码:

aCollection do: [ :each | each shout ]
我想找到block参数:each,然后每次匹配,为了简单起见,让我们假设每次出现,而不仅仅是在括号内。 请注意,参数可以有任何名称,例如:myArg

我的匹配尝试:每个:

\:([\d\w]+)
这似乎奏效了。问题是我要匹配每个事件的发生。我认为这样的方法可以奏效:

\:([\d\w]+)|\1
但交替的右侧似乎被视为一个独立的表达式,因此反向引用不起作用


甚至可以在一个表达式中实现我想要的吗?或者我必须通过另一个函数调用在第二个表达式中使用backreference吗?

您可以在支持可变长度查找的语言中这样做,只有.NET framework语言支持,Perl 6可能支持。在这里,如果匹配,您可以突出显示一个单词?我相信正则表达式引擎在匹配之间存储的唯一内容是最后一个匹配的位置。因此,在查找下一个匹配项时,不能使用前一个匹配项的反向引用


所以,不,我认为这是不可能的。

谢谢。我已经担心这可能是事实。这意味着我必须破解语法高亮代码。。。哦,好吧。。。