Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RegExp:如何仅查找一个匹配(或不匹配模式)_Javascript_Regex - Fatal编程技术网

Javascript 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

我不知道如何正确地编写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'.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