RegEx:在字母后找到单词,但不在结果中包含该字母

时间:2010-09-06 17:24:34

标签: javascript regex lookaround

这是我可能拥有的字符串:

(MyStringIsOneWholeWord *)

我使用了以下javascript正则表达式来获取括号后的文本,如果它以My开头。

/(^|\s|\()+My(\w+)/g,

这个问题在于它包含结果中的第一个括号,因为它是找到它的字母/字符。

我如何摆脱结果中的括号?


修改

有关详细信息,我正在编辑SHJS语法高亮显示器的C Language javascript文件。

以下是此问题的所有相关代码:

[
 /(^|\s|\()+My(\w+)/g,
 'sh_keyword',
 -1
]

3 个答案:

答案 0 :(得分:2)

如果这是只是 JS,你可以使用捕获组:

/(^|\s|\()+(My\w+)/g

然后在该组获得比赛。但是,似乎SHJS将使用整个匹配,需要使用lookbehind,Javascript的Regex引擎不支持。


为了解决这个问题,我建议您read the documentation。这部分在这里:

  

一旦定义了语言,   你必须将它转换为JavaScript   SHJS使用的格式。你需要   来自源的sh2js.pl脚本   SHJS的分布。 sh2js.pl   脚本是用Perl编写的并且需要   Parse :: RecDescent模块。

告诉我生成的JS文件不是要编辑的。文档说SHJS使用与GNU Source-highlighting相同的格式,它被指定为here。因此,您应该修改原始的.lang (link)文件,然后将其转换为.js

答案 1 :(得分:1)

你想要的是一个积极的外观断言。不幸的是,Javascript不支持它们。但是,Steven Levithan在博客文章中介绍了这一点:http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

修改:由同一作者更新的文章:http://blog.stevenlevithan.com/archives/javascript-regex-lookbehind

答案 2 :(得分:0)

我不明白你想要捕捉到什么,但你可以尝试其中一些:

在$ 1中捕获StringIsOneWholeWord

/(?:^|\s|\()+My(\w+).*\)/

在$ 1中捕获MyStringIsOneWholeWord

/(?:^|\s|\()+(My\w+).*\)/

在$ 1中捕获MyStringIsOneWholeWord *

/(?:^|\s|\()+(My\w+.*)\)/

在$ 1中捕获StringIsOneWholeWord *

/(?:^|\s|\()+My(\w+.*)\)/