gpt4 book ai didi

javascript - JS 正则表达式 : Remove anything (ONLY) after a word

转载 作者:太空宇宙 更新时间:2023-11-04 16:28:56 26 4
gpt4 key购买 nike

我想删除每个单词后面的所有符号(该符号取决于我当时选择的符号),而不知道该单词可能是什么。但请将它们放在每个单词之前。

几个例子:

!!hello! my! !!name!!! is !!bob!!应该返回...

!!hello my !!name is !!bob ;对于 !

$remove$ the$ targetted$@ $$symbol$$@ only $after$ a $word$应该返回...

$remove the targetted@ $$symbol@ only $after a $word ;对于 $

最佳答案

您需要使用捕获组并替换:

"!!hello! my! !!name!!! is !!bob!!".replace(/([a-zA-Z]+)(!+)/g, '$1');

这适用于您的测试字符串。要适用于任何通用字符或字符组:

var stripTrailing = trail => {
let regex = new RegExp(`([a-zA-Z0-9]+)(${trail}+)`, 'g');
return str => str.replace(regex, '$1');
};

请注意,这对于在正则表达式中有意义的任何字符都会失败:[]{}+*^$。等等。以编程方式转义这些内容留给读者作为练习。

更新

根据您的评论,我认为解释可能对您有帮助,因此:

首先,在这种情况下无法仅替换匹配的一部分,您必须替换整个匹配。所以我们需要找到一个匹配的模式,将其分成我们想要保留的部分和我们不想要的部分,然后用我们想要保留的部分替换整个匹配。因此,让我们将上面的正则表达式分成多行,看看发生了什么:

首先,我们要匹配任意数量的连续字母数字字符,这将是要从中去除尾随符号的“单词”:

(       // denotes capturing group for the 'word'
[ // [] means 'match any character listed inside brackets'
a-z // list of alpha character a-z
A-Z // same as above but capitalized
0-9 // list of digits 0 to 9
]+ // plus means one or more times
)

捕获组意味着我们希望访问比赛的该部分。然后我们还有另一组

(
! // I used ES6's string interpolation to insert the arg here
+ // match that exclamation (or whatever) one or more times
)

然后我们添加 g 标志,以便目标字符串中的每个匹配都会发生替换,而不会在第一个匹配后返回标志。 JavaScript 以自动插入符号的形式提供了一种方便的速记方式来访问捕获组,上面的“$1”表示“在此字符串中插入第一个捕获组的内容”。

因此,在上面,如果您将 '$1' 替换为 '$1$2',您会看到与开头相同的字符串,如果您执行 'foo$2',您会看到 foo 代替后面的每个单词一个或多个!等

关于javascript - JS 正则表达式 : Remove anything (ONLY) after a word,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39988300/

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