正则表达式:匹配字符串中所有单词的模式

时间:2018-07-21 08:32:31

标签: javascript regex

我有一个正则表达式模式,该模式匹配字符串中第一个词中仅 前(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');

输出:虚荣心是恶习

2 个答案:

答案 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)

在我看来,您想替换单词{开头的abi以外的任何其他字符char。

您可以使用

.replace(/\b[^\Wabi]/gi, 'v')

请参见regex demo

  • \b-单词边界
  • [^\Wabi]-否定的字符类,它与非单词char以外的任何char匹配(因此,所有单词char都匹配,但该类中也存在的char除外),abi

添加了全局修饰符g,以匹配所有匹配项。

JS演示:

console.log(
     "sanity is a rice".replace(/\b[^\Wabi]/gi, 'v')
);