我必须匹配特定正则表达式的字符串并替换(替换为空)。但是,在替换期间我必须只替换匹配的正则表达式的一部分。见下文。
我有以下正则表达式:
$scope.concatenatedData = $scope.findCompanyAddressById( 1 );
这个正则表达式应该匹配(至少,我希望如此)所有出现的:
var regex1 = RegExp('[\s.,:\*]+' + word + '?s?i?\s*:?\s*', 'gi');
word
之前应该至少有一个whitespace, dot, comma, : or *
符号,而且此[\s.,:\*]+
word
之后可能还有一些其他特定符号(包括s
和i
个字母),而不是其他例如,匹配将是'?s?i?\s*:?\s*'
; .testword
; ,testwords
。
我用“无”代替这些事件::.testword
。
但是,我不需要替换第一部分:str = str.replace(regex1, "")
。我希望它留下来。所以在字符串中
[\s.,:\*]+
答案 0 :(得分:1)
请注意,您必须在字符串文字中使用双\
定义\
。 '[\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”部分
正则表达式部分。