JavaScript регулярное выражение с косой чертой не заменяет - PullRequest
33 голосов
/ 13 января 2011

Должен ли я избегать косых черт, когда помещаю их в регулярное выражение?

myString = '/courses/test/user';
myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);

Вместо того, чтобы печатать «тест», он печатает всю исходную строку.

См. Эту демонстрацию:

http://jsbin.com/esaro3/2/edit

Ответы [ 4 ]

43 голосов
/ 13 января 2011

Ваше регулярное выражение идеально, и да, вы должны избегать косых черт, поскольку JavaScript использует косые черты для обозначения регулярных выражений.

Однако проблема в том, что метод JavaScript replace не выполняет замену на месте.То есть он фактически не изменяет строку - он просто дает вам результат замены.

Попробуйте это:

myString = '/courses/test/user';
myString = myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);

Это устанавливает myString в замененное значение.

12 голосов
/ 25 сентября 2013

/[\/]/g соответствует косой черте.
/[\\]/g соответствует обратным слешам.

9 голосов
/ 29 октября 2016

На самом деле, вам не нужно избегать косой черты, когда он находится внутри класса символов, как в одной части вашего примера (то есть, [^\/]* подходит просто как [^/]*). Если он находится за пределами класса символов (как в остальной части вашего примера, например \/courses), то вам необходимо экранировать косую черту.

9 голосов
/ 13 января 2011

string.replace не изменяет исходную строку.Вместо этого возвращается новая строка, в которой была выполнена замена.

Try:

myString = '/courses/test/user';
document.write(myString.replace(/\/courses\/([^\/]*)\/.*/, "$1"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...