0

这是我可能有的字符串:

(MyStringIsOneWholeWord *)

如果括号后的文本以My.

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

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

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


编辑

有关更多信息,我正在编辑C LanguageSHJS 语法荧光笔的 javascript 文件。

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

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

3 回答 3

2

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

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

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


为了解决这个问题,我建议您阅读文档。这部分在这里:

定义语言后,必须将其转换为 SHJS 使用的 JavaScript 格式。您将需要来自 SHJS 源代码分发的 sh2js.pl 脚本。sh2js.pl 脚本是用 Perl 编写的,需要 Parse::RecDescent 模块。

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

于 2010-09-06T17:27:20.613 回答
1

你想要的是一个积极的后向断言。不幸的是,Javascript 不支持它们。然而,Steven Levithan 在这里的一篇博文中对此进行了介绍:http: //blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

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

于 2010-09-06T18:56:16.857 回答
0

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

StringIsOneWholeWord以 $1捕获:

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

MyStringIsOneWholeWord以 1 美元捕获:

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

MyStringIsOneWholeWord *以 1 美元捕获:

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

StringIsOneWholeWord *以 1 美元捕获:

/(?:^|\s|\()+My(\w+.*)\)/
于 2010-09-06T18:21:43.367 回答