Подтвердить что ты не робот

JavaScript regex replace - сбрасывание косых черт

Должен ли я избегать слэшей при помещении их в регулярное выражение?

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

Вместо печати "test" он печатает всю исходную строку.

Смотрите это демо:

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

4b9b3361

Ответ 1

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

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

Попробуйте следующее:

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

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

Ответ 2

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

Try:

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

Ответ 3

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

Ответ 4

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