我必须为特定的正则表达式匹配字符串并进行替换(替换为空)。但是,在替换期间,我必须只替换匹配的正则表达式的一部分。见下文。
我有以下正则表达式:
var regex1 = RegExp('[\s.,:\*]+' + word + '?s?i?\s*:?\s*', 'gi');
这个正则表达式应该匹配(至少,我希望如此)所有出现的:
- word(例如“testword”)
word
- 应该至少有一个
空格、点、逗号、: 或 *
恰好在这个词[\s.,:\*]+
之前,没有其他符号这个和word
之间的符号
- 可能有一些其他特定符号(包括
s
和i
字母)紧跟在'?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/