javascript - 用正则表达式匹配和替换,但只替换正则表达式找到的某些部分

标签 javascript regex replace

我必须为特定的正则表达式匹配字符串并进行替换(替换为空)。但是,在替换期间,我必须只替换匹配的正则表达式的一部分。见下文。

我有以下正则表达式:

var regex1 = RegExp('[\s.,:\*]+' + word + '?s?i?\s*:?\s*', 'gi');

这个正则表达式应该匹配(至少,我希望如此)所有出现的:

  • word(例如“testword”)word
  • 应该至少有一个 空格、点、逗号、: 或 * 恰好在这个词 [\s.,:\*]+ 之前,没有其他符号这个和 word
  • 之间的符号
  • 可能有一些其他特定符号(包括 si 字母)紧跟在 '?s?i?\s*:?\s*' 仅此而已

例如,匹配项是 .testword,testwords; :.testword.

我将这些事件替换为“无”:str = str.replace(regex1, "")

但是,我不需要替换第一部分:[\s.,:\*]+。我想让它留下来。所以在字符串中

          "Some words .testword"
should be "Some words ."
I have    "Some words"    (there is no dot at the end).

最佳答案

请注意,您必须在带有双 \ 的字符串文字中定义 \'[\s.,:\*]+' => '[\\s.,:*]+'。用 capturing group 包裹它并使用 backreference在更换。 RegExp('([\\s.,:*]+)' + word + 's?i?\\s*:?\\s*', 'gi'); 并替换使用 "$1",而不是 ""

var s  = "Some words .testword";
var word="testword";
var rx = RegExp('([\\s.,:*]+)' +word + 's?i?\\s*:?\\s*', 'gi');
console.log(s.replace(rx, "$1"));

$1 将插入与 ([\\s.,:*]+) 匹配的字符串“sub”部分 正则表达式部分。

关于javascript - 用正则表达式匹配和替换,但只替换正则表达式找到的某些部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48517687/

相关文章:

javascript - 如何将正则表达式分配给变量以供以后在字符串上使用?

c# - 如何替换 C# 字符串中的特定字符?

javascript - AngularJS - ng-include ng-controller 和范围不绑定(bind)

javascript - 这段代码是做什么用的? (只是好奇)

javascript - 将数据表行添加到表的顶部或底部?

regex - 寻找猫王? :

javascript - 将谷歌脚本值传递给 html

regex - 无效的正则表达式组 javascript

sql - 如何使用 sql 通配符 '%' 进行替换?

javascript - 无法替换\r 字符