我有一个正则表达式模式,该模式匹配字符串中第一个词中仅 前(a,b,c或i)的前导字符:/^\s*[^abci]+(?=\w)/i
这样:
"sanity".replace(/^\s*[^abi]+(?=\w)/i, (pattern) => 'v');
// "vanity"
如何定义正则表达式newRegex
,使其与字符串的每个单词中的前导字符匹配,以便:
"sanity is a rice".replace(newRegex, (pattern) => 'v');
输出:虚荣心是恶习
答案 0 :(得分:2)
您还可以尝试使用split()
和map()
删除第一个字符并获得所需的输出:
function replaceChar(str){
var matchChar = ['a', 'b', 'c', 'i'];
var changedArr = str.split(/\s+/).map((item) => {
if(matchChar.includes(item.charAt(1))){
return 'v' + item.substr(1, item.length);
}
return item;
});
return changedArr.join(' ');
}
var str = 'sanity is a rice';
console.log(replaceChar(str));
str = 'This is a mice';
console.log(replaceChar(str));
答案 1 :(得分:2)
在我看来,您想替换单词{开头的a
,b
和i
以外的任何其他字符char。
您可以使用
.replace(/\b[^\Wabi]/gi, 'v')
请参见regex demo。
\b
-单词边界[^\Wabi]
-否定的字符类,它与非单词char以外的任何char匹配(因此,所有单词char都匹配,但该类中也存在的char除外),a
, b
和i
。添加了全局修饰符g
,以匹配所有匹配项。
JS演示:
console.log(
"sanity is a rice".replace(/\b[^\Wabi]/gi, 'v')
);