Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS Regex:删除单词后的任何内容(仅限)_Javascript_Regex - Fatal编程技术网

Javascript JS Regex:删除单词后的任何内容(仅限)

Javascript JS Regex:删除单词后的任何内容(仅限),javascript,regex,Javascript,Regex,我想删除每个单词后的所有符号(符号取决于我当时选择的内容),而不知道单词可能是什么。但是在每一个单词之前都要把它们放进去 举几个例子: !!你好我的!!名称是鲍勃应该返回 !!你好,我的天!!名字是!!鲍勃;对于 及 $remove$在$a$word$之后的$targeted$@$$symbol$$$$$@仅$应返回 $仅在$word之后删除目标@$$symbol@$;对于$您需要使用捕获组并替换: "!!hello! my! !!name!!! is !!bob!!".re

我想删除每个单词后的所有符号(符号取决于我当时选择的内容),而不知道单词可能是什么。但是在每一个单词之前都要把它们放进去

举几个例子:

!!你好我的!!名称是鲍勃应该返回

!!你好,我的天!!名字是!!鲍勃
;对于

$remove$在$a$word$
之后的$targeted$@$$symbol$$$$$@仅$应返回


$仅在$word之后删除目标@$$symbol@$;对于
$

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

"!!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代替由一个或多个单词尾随的每个单词!,等等。

你试过……什么?太好了,谢谢。你在哪里学的“正则表达式技巧”?想改进我的。主要是在这里,所以,你走在正确的轨道上。Zed Shaw的《艰苦学习正则表达式》是一个很好的资源。但是最好的办法是去一个像regex101这样的网站开始玩,因为它会给你一个关于regex的解释@Kreitzo在答案中添加了解释,“希望这对你有所帮助。这里不能也使用积极的lookaheads吗?@GGG我不这么认为,匹配后匹配单词将是一个lookback!”JS不能做“向后看”。我玩了它,但没有让它发挥作用,请随意发布另一个答案。