在JavaScript中匹配一个单词而不匹配另一个单词的正则表达式

在JavaScript中匹配一个单词而不匹配另一个单词的正则表达式,javascript,regex,Javascript,Regex,我想匹配包含字符串yes的表达式,但前提是它前面没有字符串no 例如,这与匹配: 你好,世界,少校是这里! 但这不匹配:该死的不,是的 第二个字符串不匹配,因为“是”字符串前面有“否”字符串。显然,这需要否定的lookbehind,这不是用JavaScript正则表达式实现的,我尝试过这样的东西: /?!不,是的/ /^?!.*不,是的$/ 但它们似乎没有达到预期的效果://我认为这里不需要正则表达式。你可以这样做 var str = "Hell no yes", match = null, n

我想匹配包含字符串yes的表达式,但前提是它前面没有字符串no

例如,这与匹配: 你好,世界,少校是这里! 但这不匹配:该死的不,是的

第二个字符串不匹配,因为“是”字符串前面有“否”字符串。显然,这需要否定的lookbehind,这不是用JavaScript正则表达式实现的,我尝试过这样的东西: /?!不,是的/ /^?!.*不,是的$/


但它们似乎没有达到预期的效果://

我认为这里不需要正则表达式。你可以这样做

var str = "Hell no yes", match = null, no = str.indexOf("no"), yes = str.indexOf("yes");
if(no >= 0 && (yes < 0 || no < yes)) { // check that no doesn't exist before yes
   match = str.match(/yes/)[0]; // then match the "yes"
}

我认为这里不需要正则表达式。你可以这样做

var str = "Hell no yes", match = null, no = str.indexOf("no"), yes = str.indexOf("yes");
if(no >= 0 && (yes < 0 || no < yes)) { // check that no doesn't exist before yes
   match = str.match(/yes/)[0]; // then match the "yes"
}

你可以试试下面的正则表达式

^(?=(?:(?!\bno\b).)*yes).*
说明:


你可以试试下面的正则表达式

^(?=(?:(?!\bno\b).)*yes).*
说明:


这应该适合您:

var reg = /^((?!no).)*yes.*$/

console.log("Test some no and yes".match(reg))
console.log("Test some yes".match(reg))
console.log("Test some yes and no".match(reg))
请注意,在没有“是”这样的词的句子中,它是不起作用的:

console.log("Test some without".match(reg))
以下是可能有助于更多了解该问题的参考资料:


这应该适合您:

var reg = /^((?!no).)*yes.*$/

console.log("Test some no and yes".match(reg))
console.log("Test some yes".match(reg))
console.log("Test some yes and no".match(reg))
请注意,在没有“是”这样的词的句子中,它是不起作用的:

console.log("Test some without".match(reg))
以下是可能有助于更多了解该问题的参考资料:


+1用于使用简单的代码,而不是凌乱的正则表达式。也许你必须确保“否”出现在“是”之前。这是一个很好的解决方案,但解决了另一个问题。我有一个针对不同情况的正则表达式数组——比这个更复杂。我不想为我可能有的每个字符串大小写实现流逻辑-这就是正则表达式的发明目的。@MeLight-所以只要做一个传递两个单词的函数,你就可以在任何地方重复使用相同的代码。@MeLight那么你真的必须创建一个更混乱的正则表达式,如果str不包含no,那么相当复杂的tooThis语句就会失败indexOf=-1。所以它需要额外的条件+1来使用简单的代码,而不是混乱的正则表达式。也许你必须确保“否”出现在“是”之前。这是一个很好的解决方案,但解决了另一个问题。我有一个针对不同情况的正则表达式数组——比这个更复杂。我不想为我可能有的每个字符串大小写实现流逻辑-这就是正则表达式的发明目的。@MeLight-所以只要做一个传递两个单词的函数,你就可以在任何地方重复使用相同的代码。@MeLight那么你真的必须创建一个更混乱的正则表达式,如果str不包含no,那么相当复杂的tooThis语句就会失败indexOf=-1。所以它需要额外的条件。我只是想给出另一个可能更简单的解决方案:没问题。我只是想给出另一个可能更简单的解决方案: