【问题标题】:RegEx: Find word after a letter but don't include the letter in the result正则表达式:在字母后查找单词,但结果中不包含该字母
【发布时间】:2010-09-06 17:24:34
【问题描述】:

这是我可能有的字符串:

(MyStringIsOneWholeWord *)

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

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

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

如何去掉结果中的括号?


编辑

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

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

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

【问题讨论】:

    标签: javascript regex lookaround


    【解决方案1】:

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

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

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


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

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

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

    【讨论】:

    • 不幸的是,它们都不适合我,它甚至不会像以前那样做。 ://
    • 这仍然对我不起作用,但现在您指出字符串可能与它有关。这是实际的字符串,但不确定它是否会影响它:(MyStringIsOneWholeWord *).
    • * 也不包含在字符类\w 中。尝试将正则表达式修改为/(?:^|\s|\()+(My\w+)\W/g
    • 仍然没有运气。
    • @Joshua 请发布您的其余代码。我相信这些工作。
    【解决方案2】:

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

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

    【讨论】:

    • 不幸的是,我认为 OP 不能使用任何这些变通方法。不过有趣的链接。
    【解决方案3】:

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

    在 $1 中捕获 StringIsOneWholeWord

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

    在 $1 中捕获 MyStringIsOneWholeWord

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

    在 $1 中捕获 MyStringIsOneWholeWord *

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

    在 $1 中捕获 StringIsOneWholeWord *

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      相关资源
      最近更新 更多