Когда вы начинаете класс символов с ^
(как у вас в [^"//"]
), это означает «любой символ, кроме перечисленных».Таким образом, [^"//"]
означает «соответствовать одному из любых символов, кроме "
и /
(игнорируется тот факт, что вы перечислили каждый из них дважды).
Если вы пытаетесь сопоставить текст междудве косые черты (//
) и одна обратная косая черта (\
) (в соответствии с вашим вопросом; вы позже сделали комментарий, предложив, что это две обратные косые черты, я расскажу об этом позже), затем:
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: