这是我可能拥有的字符串:
(MyStringIsOneWholeWord *)
我使用了以下javascript正则表达式来获取括号后的文本,如果它以My
开头。
/(^|\s|\()+My(\w+)/g,
这个问题在于它包含结果中的第一个括号,因为它是找到它的字母/字符。
我如何摆脱结果中的括号?
修改
有关详细信息,我正在编辑SHJS语法高亮显示器的C Language
javascript文件。
以下是此问题的所有相关代码:
[
/(^|\s|\()+My(\w+)/g,
'sh_keyword',
-1
]
答案 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+.*)\)/