我需要在任意位置匹配不包含关键字的字符串

时间:2010-07-23 08:41:00

标签: javascript regex regex-negation

我需要在任意位置匹配 包含关键字(beta2)的字符串。

考虑:

var aStr    = [
                '/beta1/foo',
                'beta1/foo',
                '/beta1_xyz/foo',
                'blahBlah/beta1/foo',
                'beta1',

                '/beta2/foo',
                'beta2/foo',
                '/beta2_xyz/foo',
                'blahBlah/beta2/foo',
                'beta2',

                '/beat2/foo',
                'beat2/foo',
                '/beat2_xyz/foo',
                'blahBlah/beat2/foo',
                'beat2'
            ];

function bTestForMatch (Str)
{
    return /.*\b(?!beta2).*/i.test (Str);
}

for (var J=0, iLen=aStr.length;  J < iLen;  J++)
{
    console.log (J, bTestForMatch (aStr[J]), aStr[J]);
}

我们需要一个匹配排除beta2的所有字符串的正则表达式。 beta2总是从单词边界开始,但不一定以一个结尾。它可以在字符串中的各个位置。

期望的结果将是:

 0    true    /beta1/foo
 1    true    beta1/foo
 2    true    /beta1_xyz/foo
 3    true    blahBlah/beta1/foo
 4    true    beta1
 5    false   /beta2/foo
 6    false   beta2/foo
 7    false   /beta2_xyz/foo
 8    false   blahBlah/beta2/foo
 9    false   beta2
10    true    /beat2/foo
11    true    beat2/foo
12    true    /beat2_xyz/foo
13    true    blahBlah/beat2/foo
14    true    beat2

正则表达式适用于第三方分析工具,它使用JavaScript正则表达式来过滤子结果。该工具需要一行正则表达式。没有API,我们无法访问其源代码。

是否有一个JavaScript正则表达式会过滤此分析运行中的第二个测试结果(beta2)?

2 个答案:

答案 0 :(得分:4)

尝试

/^(?!.*beta2).*$/

答案 1 :(得分:0)

这会被视为作弊吗?

return !/beta2/i.test (Str);