Javascript正则表达式在字符串中查找模式,排除可能的前一个单词匹配

时间:2017-01-17 04:56:33

标签: javascript regex

变量中有一串书写/文字:

var copypaste, replaced;
var verbdb = ["keep","know","enjoy"];
var arrayLength = verbdb.length;

for (var i = 0; i < arrayLength; i++) {
    copypaste = "One of the reasons first_name keep waking up at night, is blah blah blah. Try this, let first_name know and see blah blah blah. Remember that first_name enjoy being challenged and blah blah blah.";

    replaced = copypaste.replace(RegExp("[^let]? first_name " + verbdb[i] + "(\s|\.)","g")," first_name " + verbdb[i] + "_object_s\$1");
}

我想从replaced变量中获取的内容是,仅当first_name前面有单词let时才排除。

  

&#34; first_name keep_object_s在晚上醒来的原因之一,是等等等等。试试这个,让first_name知道,看看等等等等。请记住,first_name enjoy_object_s受到挑战,等等等等等等。&#34 ;;

所以在这个例子中:

  1. 第一个模式匹配(保留)并替换为添加的_object_s
  2. 第二个模式不匹配(知道),因为单词&#34; let&#34;,所以没有替换
  3. 第三种模式MATCHES(享受)并被添加的_object_s替换。

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

(?:\b)(?!let)(?=\w+\sfirst_name\s+(know|keep|enjoy))(\w+ \w+)\s+(\w+)

Explanation

&#13;
&#13;
const regex = /(?:\b)(?!let)(?=\w+\sfirst_name\s+(know|keep|enjoy))(\w+ \w+)\s+(\w+)/g;
const str = `One of the reasons first_name keep waking up at night, is blah blah blah. Try this, let first_name know and see blah blah blah. Remember that first_name enjoy being challenged and blah blah blah`;
const subst = `$2 _object_s`;

const result = str.replace(regex, subst);
console.log(result);
&#13;
&#13;
&#13;