Javascript正则表达式来查找字符串中的模式,不包括可能的前一个单词匹配

Javascript正则表达式来查找字符串中的模式,不包括可能的前一个单词匹配,javascript,regex,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

变量中有一个写入/文本字符串:

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");
}
var复制粘贴,已替换;
var verbdb=[“保持”、“了解”、“享受”];
var arrayLength=verbdb.length;
对于(变量i=0;i

我想从
replaced
变量中得到的是仅当first_name前面有单词
let
时才排除

“名字让“对象”在晚上醒来的原因之一是诸如此类。试试这个,让名字知道并看到诸如此类的东西。记住,名字喜欢“对象”受到挑战,诸如此类。”


所以在这个例子中:

  • 第一个模式匹配(保留)并替换为添加的
    \u object\s
  • 第二个模式不匹配(知道),因为单词“let”,所以没有替换
  • 第三个模式匹配(享受)并替换为添加的
    \u object\s
  • 您可以尝试以下方法:

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

    const regex=/(?:\b)(?!let)(?=\w+\sfirst\u name\s+(know | keep | level))(\w+\w+\s+(\w+)/g;
    const str=`first_name总是在晚上醒来的原因之一就是诸如此类。试试这个,让你的名字知道,看看这些废话。记住,你的名字喜欢被挑战,诸如此类;
    const subst=`$2_object_s`;
    const result=str.replace(regex,subst);
    
    控制台日志(结果)
    您似乎不明白正则表达式中的
    []
    是什么意思。它不是用来分组的,这就是
    ()
    的用途。
    [^let]
    匹配的单个字符不是
    l
    e
    、或
    t
    ,它不排除字符串
    let
    。您要查找的是一个反向查找,但是Javascript正则表达式没有这个功能。请参阅以了解一些解决方法。谢谢-我将查看该链接并了解更多信息,我得到了[]和(),但不可否认,这段代码片段让我不知所措,变得邋遢。哇,这很优雅且有效-好极了,我向你的掌握致敬。我将学习更多关于这一切意味着什么。非常感谢。