Мне нужно сопоставить строки, которые не содержат ключевое слово в произвольной позиции - PullRequest
2 голосов
/ 23 июля 2010

Мне нужно сопоставить строки, которые не содержат ключевое слово (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 ]

4 голосов
/ 23 июля 2010

Попробуйте

/^(?!.*beta2).*$/
0 голосов
/ 23 июля 2010

Будет ли это считаться обманом?

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