正则表达式:根据前缀排除替换匹配

时间:2016-05-23 02:22:49

标签: javascript regex

注意:我在改变建议的解决方案的情况下使用JavaScript。

查看多个文件并更改属性/参数(如“count”)时(例如countregister.countfunction(count)getCount,{{1}我遇到了一个改变“折扣”,“重新计票”或“遭遇”等字眼的问题。

我意识到,对于我的小用例*,可以通过使用简单的启发式方法来避免此错误 - 查找前缀为“count”的已知字符分组并将其从替换中排除。

问题

有没有办法使用正则表达式查找所有实例 “count”但忽略替换,如果找到已知的字符前缀分组?

只是为了澄清*

我知道如果你试图在一个大的未知搜索空间中对“count”之外的其他单词进行概括,那么我的“前缀启发式”会崩溃,但现在就足够了。

2 个答案:

答案 0 :(得分:0)

你可以这样处理正则表达式:

\b(get)?(count|Count)\b

您应该应用不区分大小写的开关。

\b assert position at a word boundary (^\w|\w$|\W\w|\w\W)
1st Capturing group (get)?
    Quantifier: ? Between zero and one time, as many times as possible, giving back as needed [greedy]
    Note: A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data
    get matches the characters get literally (case sensitive)
2nd Capturing group (count|Count)
    1st Alternative: count
        count matches the characters count literally (case sensitive)
    2nd Alternative: Count
        Count matches the characters Count literally (case sensitive)
\b assert position at a word boundary (^\w|\w$|\W\w|\w\W)

答案 1 :(得分:0)

鉴于javascript缺乏外观,我认为不可能采用排除路线。

无论如何,你的“已知”前缀是允许的,这不是更容易吗?毕竟,你不能列出在其中某处“计数”的每个常规单词。允许使用已知的合法前缀,让\b处理剩下的事情:

  • 模式:(get|increment)count|\bcount\b //case insensitive

  • 替换:$1FOO

demo