Javascript正则表达式替换为条件

Javascript正则表达式替换为条件,javascript,regex,Javascript,Regex,我想在JavaScript中使用正则表达式来替换多行文本中的一些单词。 来源: 多卡(1)20岁。多卡,(2)索尔是我的朋友。Sole告诉我“Doka(3)是个不错的gỉrl! 多卡:(4)哈马学校的学生。 我昨天遇到了多卡 按预期更换的结果: 鲍勃(1)20岁了

我想在JavaScript中使用正则表达式来替换多行文本中的一些单词。 来源:

多卡(1)20岁。多卡,(2)索尔是我的朋友。Sole告诉我“Doka(3)是个不错的gỉrl!
多卡:(4)哈马学校的学生。
我昨天遇到了多卡

按预期更换的结果:

鲍勃(1)20岁了<鲍勃是我的朋友。Sole告诉我“Doka(3)是个不错的gỉrl!
多卡:(4)哈马学校的学生。
我昨天遇到了鲍勃

在本例中,我想用Bob替换Doka(1,2,5)。替换匹配项的条件包括:

  • 不在双引号内
  • 不在回车和冒号之间

  • 如何实现这一点?

    您可以使用此正则表达式和代码,前提是任何双引号都已正确关闭,即双引号出现的次数为偶数:

    var str=`Doka(1)已经20岁了。多卡,(2)索尔是我的朋友。Sole告诉我“Doka(3)是个不错的gỉrl!”
    多卡:(4)哈马学校的学生。
    我昨天遇到了多卡;
    str=str.replace(/([^\n\r])Doka | Doka(?!:)(?=([^“]*”[^“]*”[^“]*”*)*[^“]*$)/g,$2Bob');
    
    console.log(str);
    您可以使用此正则表达式和代码,前提是任何双引号都正确关闭,即双引号出现的次数为偶数:

    var str=`Doka(1)已经20岁了。Doka,(2)Sole是我的朋友。Sole告诉我“Doka(3)是一个很好的gỉrl!"
    多卡:(4)哈马学校的学生。
    我昨天遇到了多卡;
    str=str.replace(/([^\n\r])Doka | Doka(?!:)(?=([^“]*”[^“]*”[^“]*”*)*[^“]*$)/g,$2Bob');
    
    console.log(str)@qxz,我已经添加了一些解释。前面的字符不是点。如何解决这个问题?如果单词前有一个点,你想不替换吗?这与前面不能有换行符的要求完全相同,因此只需将该字符添加到列表中,如
    [^\n\r.]
    。你懂这个符号吗<代码>[^…]
    ?您可以阅读有关正则表达式的内容。@qxz,我已经添加了一些解释。前面的字符不是点。如何解决这个问题?如果单词前有一个点,你想不替换吗?这与前面不能有换行符的要求完全相同,因此只需将该字符添加到列表中,如
    [^\n\r.]
    。你懂这个符号吗<代码>[^…]?您可以阅读有关正则表达式的内容。