繁体   English   中英

Javascript RegExp-如何匹配一个单词,但是如果还存在另一个单词则不匹配?

[英]Javascript RegExp - how do I match for a word, but not if another word is also present?

我正在针对一系列正则表达式测试字符串。 其中大多数都很简单-通常只是测试字符串中是否出现单个单词,就像这样

var str = 'Blah blah foo blah';

var my_array = [
    {
        test: 'foo',
        name: 'foo_ame'
    },
    {
        test: 'bar',
        name: 'bar_name'
    }
]

for (var i = 0; i < my_array.length; i++) {
    if (new RegExp(my_array[i].test).test(str)) {
        console.log(my_array[i].name); // foo_name
    }
}

我有一种情况要匹配,如果字符串包含“ qux”而不是“ foo”,例如

for 'blah foo blah'     returns foo_name
for 'blah foo qux blah' returns qux_name (only)

在大约30种情况下,只有这种情况才是真正必要的,因此,如果可以避免的话,我宁愿不重写循环。 我可以用正则表达式匹配吗?

AFAIK,在一个正则表达式中执行此操作的唯一方法是使用环视,但它会非常庞大​​,因为您想捕获“ foo”在“ qux”之前或之后的实例。 例如

/^(?:(?!foo).)*qux(?:(?!foo).)*$/

我建议更改测试字符串的方式,以便您可以使用正数正则表达式和负数正则表达式-例如,一个字符串必须通过,而字符串必须通过。

我猜您正在寻找“负向隐藏”( 请参阅此非常好的在线帮助 -不幸的是,他们说javascript不支持“向后隐藏”)

例如。 (?<!a)b匹配不带“ a”的“ b”

所以在你的情况下:

(?<!foo )qux //don't forget the space after foo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM