2010-09-06 54 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+.*)\)/