2010-09-06 50 views
0

这封信就是我可能有一个字符串:正则表达式:查找单词书后,但不包括在结果

(MyStringIsOneWholeWord *) 

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

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

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

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


编辑

欲了解更多信息,我编辑C Language的SHJS语法高亮显示的JavaScript文件。

这里的一切对于这个问题的相关代码:

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

回答

2

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

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

然后拿到赛在该组。但是,看起来SHJS将使用整个匹配,需要使用lookbehind,这是Javascript的Regex引擎不支持的。


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

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

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

+0

无论他们的工作对我来说不幸的是,它甚至不会做什么它以前那样。 :/ – Joshua 2010-09-06 17:42:53

+0

@Joshua查看我的更新回答 – NullUserException 2010-09-06 17:51:00

+0

这对我仍然不起作用,但现在你指出该字符串可能与它有关。这是实际的字符串,不确定是否会影响它:'(MyStringIsOneWholeWord *)'。 – Joshua 2010-09-06 18:06:13

0

我不明白你想捕捉什么,但你可以尝试一些这样的:$ 1

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

捕获MyStringIsOneWholeWord

捕获StringIsOneWholeWord $ 1

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

capture MyStringIsOneWholeWord * in $ 1:

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

$ 1捕获StringIsOneWholeWord *

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