匹配并替换正则表达式,但只替换regexp找到的某些部分

时间:2018-01-30 09:13:55

标签: javascript regex replace

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

我有以下正则表达式:

$scope.concatenatedData = $scope.findCompanyAddressById( 1 );

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

  • 字(例如“testword”)var regex1 = RegExp('[\s.,:\*]+' + word + '?s?i?\s*:?\s*', 'gi');
  • 在此单词word之前应该至少有一个whitespace, dot, comma, : or *符号,而且此[\s.,:\*]+
  • 之间没有其他符号
  • 在单词word之后可能还有一些其他特定符号(包括si个字母),而不是其他

例如,匹配将是'?s?i?\s*:?\s*'; .testword; ,testwords

我用“无”代替这些事件::.testword

但是,我不需要替换第一部分:str = str.replace(regex1, "")。我希望它留下来。所以在字符串中

[\s.,:\*]+

1 个答案:

答案 0 :(得分:1)

请注意,您必须在字符串文字中使用双\定义\'[\s.,:\*]+' => '[\\s.,:*]+'。用capturing group换行并在替换中使用backreferenceRegExp('([\\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”部分  正则表达式部分。