【问题标题】:Regex: Finding strings that doesn't start with X正则表达式:查找不以 X 开头的字符串
【发布时间】:2009-08-12 06:46:22
【问题描述】:

我对正则表达式完全绝望了……

我有一个名为 #addButton 的 Velocimacro,我有一个名为 addButton() 的 JS 函数。现在我想找到所有调用 JS 函数的地方。所以我需要搜索“addButton”,其中“addButton”以哈希键开头。

有什么想法吗?

【问题讨论】:

    标签: regex


    【解决方案1】:

    我不知道 Velocimacro 是什么(从另一个答案来看,我猜“addButton”会出现在自己的行上?),但是找到 @ 之前没有的“addButton”这个词的可靠方法987654326@如下:

    /(?<!#)\baddButton\b/
    

    它会:

    1. (?&lt;!#)(?)
      • 确保当前位置前面没有#(井号)
    2. \b(?)
      • 确保当前位置是单词边界(在这种情况下,它确保前一个字符不是单词字符,而下一个字符是)
    3. addButton(?)
      • 匹配“addButton”
    4. \b(?)
      • 确保当前位置有单词边界。这样可以避免匹配“addButtonNew”之类的内容(因为“addButton”和“New”之间没有单词边界)

    这个正则表达式和另一个不同的是,这个正则表达式不会消耗“addButton”之前的字符。

    学习正则表达式的好资源是regular-expressions.info。单击上面列表中的 (?) 链接可获取指向该部分正则表达式的相关页面的链接。

    【讨论】:

    • 信息丰富的优秀答案。谢谢! (:我只是在 Eclipse 中进行正则表达式搜索,所以使用字符并不重要。(顺便说一句,Velocimacro 有点像 Velocity(开源模板语言)中的一个函数,你像普通函数一样调用它们,只有每个命令速度以哈希键开始)
    • 谢谢,我怎么能说“不匹配#,包括如果后跟任意数量的空格?”
    【解决方案2】:
    /([^#]|^)addButton/
    

    它将匹配“addButton”前面有“#”或字符串开头的每个字符串。

    【讨论】:

    • 或者让它更健壮一些(以便匹配字符串的开头),/(?:^|[^#])addButton/
    • 太棒了! ...我想我应该在正则表达式上投入一些时间...它只是到处出现...
    猜你喜欢
    • 2014-10-28
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2018-08-02
    • 2013-10-14
    • 2011-09-16
    相关资源
    最近更新 更多