Регулярное выражение Javascript, исключающее слово - PullRequest
0 голосов
/ 15 января 2012

Я знаком с регулярным выражением javascript, которое не соответствует слову , но оно мне мало помогает. когда дана строка (с любым типом символов), я хочу проанализировать ее вокруг двух токенов, "//" и "\\". я сделал следующее:

var patt = /.*[^"//"]/gm;
patt.exec(str);

но, похоже, он соответствует любым вхождениям символов в кавычках, т. Е. "/" И "//". как я могу этого достичь?

Ответы [ 2 ]

3 голосов
/ 15 января 2012

Когда вы начинаете класс символов с ^ (как у вас в [^"//"]), это означает «любой символ, кроме перечисленных».Таким образом, [^"//"] означает «соответствовать одному из любых символов, кроме " и / (игнорируется тот факт, что вы перечислили каждый из них дважды).

Если вы пытаетесь сопоставить текст междудве косые черты (//) и одна обратная косая черта (\) (в соответствии с вашим вопросом; вы позже сделали комментарий, предложив, что это две обратные косые черты, я расскажу об этом позже), затем:

var match = str.match(/\/\/(.*?)\\/);    // Match between // and \

Обратите внимание, чтонам нужно избегать косой черты, потому что косая черта является разделителем регулярных выражений, и мы должны избегать обратной косой черты, потому что обратная косая черта является escape-символом.

Вышеуказанное значение «соответствует двум слешам, за которыми следует ноль или более любого символасопровождаемый обратной косой чертой. "? после * делает * нежадным (поэтому он будет использовать столько символов, сколько может для удовлетворения выражения). () создает группу захвата , который в объекте совпадения получит символы, совпадающие в этой позиции.

Пример:

test("foo");
test("foo //bar");
test("foo //bar\\");
test("foo //bar\\ baz");
test("bar\\ baz");
test("//bar\\ baz");
test("foo //bar\\ baz \\ more \\ more");

function test(str) {
    var m = str.match(/\/\/(.*?)\\/),
        cap = (m && m[1]) || "<em>nothing</em>";
    display("Str: <code>" + str + "</code>: Captured <code>" + cap + "</code>");
}

Вывод:

Сила: foo: Захвачено nothing

Str: foo //bar: Захвачено nothing

Str: foo //bar\: Захвачено bar

Str.: foo //bar\ baz: Захвачено bar

Сила: bar\ baz: Захвачено nothing

Сила: //bar\ baz: Захвачено bar

Str: foo //bar\ baz \ more \ more: Захвачено bar

Живая копия

Или для двух обратных слешей:

var match = str.match(/\/\/(.*?)\\\\/);  // Match between // and \\

Живая копия (вывод такой же, только с двумя обратными слешами)

Некоторое чтение регулярных выражений JavaScript:

1 голос
/ 15 января 2012

Как насчет просто

var tokens = str.split(/\/\/|\\\\/);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...