gpt4 book ai didi

javascript - 在正则表达式中执行 "multiple passes"的优雅方法?或者让我的正则表达式更聪明?

转载 作者:行者123 更新时间:2023-11-30 09:03:48 25 4
gpt4 key购买 nike

我有一个要从字符串中删除的单词列表。我试着这样做:

var original = "X of the Y";
var result = original.replace(/\Wthe\W|\Wof\W|\Wat\W|\W+/g, " ");

// now result === "X the Y", but I wanted result === "X Y"

我意识到我可以通过循环解决这个问题,进行替换直到正则表达式测试返回零匹配。但我觉得如果我只是写一个更聪明的正则表达式,或者传递一些深奥的标志,我会没事的。有什么想法吗?

最佳答案

这是 Javascript 吧?您的正则表达式不按您希望的方式运行的唯一原因是 \W。它按顺序搜索匹配项。但是因为你在每个单词周围都有 \W 它将匹配一个非单词字符。在这种情况下,空格。所以第一个匹配项是 of(注意两边的空格),然后它继续搜索,但是没有更多的匹配项,因为字符串 the Y 没有任何匹配项匹配,因为 the 之前没有非单词字符。如果您将 \W 更改为 \b(它与单词边界处的空字符串匹配,它将按照您想要的方式工作:

var original = "X of the Y";
var result = original.replace(/\b(the|of|at)\b\s*/g, "");

// Now result = "X Y"

Justin 评论说我把括号中的 \b 去掉,这是有道理的。正则表达式引擎执行起来更易读、更简洁并且在技术上稍微快一些。

我还将末尾的 \W 更改为 \s* 以匹配空格,并将匹配项替换为空字符串而不是空格,所以每个单词都保留它们前面的空格,但删除后面的空格。这意味着如果每个单词以一个空格开头,则结果中每个单词之间也会有一个空格。

关于javascript - 在正则表达式中执行 "multiple passes"的优雅方法?或者让我的正则表达式更聪明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com