Javascript RegExp:如何仅查找一个匹配(或不匹配模式)
我不知道如何正确地编写regexp以便只匹配Javascript RegExp:如何仅查找一个匹配(或不匹配模式),javascript,regex,Javascript,Regex,我不知道如何正确地编写regexp以便只匹配heo。例如,如果我们发现一些l 在解析过程中使用char-然后取消该匹配 'heo heo helo'.match(/he.*(?!l)o/gi) // should be only [heo, heo] UPD: 我需要在字符串中匹配尽可能多的时间。不是第一个。谢谢 示例(错误的一个): console.log('heo-heo-helo'.match(/he.*(!l)o/gi)) console.log('heo-heo-helo'.mat
heo
。例如,如果我们发现一些l
在解析过程中使用char-然后取消该匹配
'heo heo helo'.match(/he.*(?!l)o/gi) // should be only [heo, heo]
UPD:
我需要在字符串中匹配尽可能多的时间。不是第一个。谢谢
示例(错误的一个):
console.log('heo-heo-helo'.match(/he.*(!l)o/gi))
console.log('heo-heo-helo'.match(/he.*(!l)o/gi))
在检查条件(?!l)
之前,您需要匹配任何字符*
。您的正则表达式应该在匹配字符之前检查条件
此外,您只希望匹配hexxxo
(x不是l
),因此您应该在正则表达式中使用\b
。我建议遵循正则表达式
console.log('heo-heo-heo-aheob'.match(/\bhe[^l]*o\b/gi))代码>有两个问题:
*
-尽可能多地匹配除换行符以外的任何零个或多个字符,因此将匹配到正则表达式中后续模式的最后一次出现。您可以在此处使用非贪婪的*?
来解决此问题
(?!l)o
-始终匹配o
,因为o
不是l
,(?!l)o
,一个负前瞻,总是返回true,表示“是”,继续并返回匹配。你想要一个负面的回顾,(?在这里)
要匹配以he
开头的字符串,然后尽可能少地匹配任何字符(换行字符除外),然后再匹配前面不带l
的o
,可以使用
/he.*?(?<!l)o/gi
/\bhe[a-z]*(?<!l)o\b/gi
/\bhe(?![a-z]*lo\b)[a-z]*o\b/gi
请参阅和。您最好使用[^l]*o/g
允许匹配的*
是什么?也许可以从字符a-z\bhe[a-km-z]*o\b中排除l