JavaScript regex replace - сбрасывание косых черт
Должен ли я избегать слэшей при помещении их в регулярное выражение?
myString = '/courses/test/user';
myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);
Вместо печати "test" он печатает всю исходную строку.
Смотрите это демо:
http://jsbin.com/esaro3/2/edit
Ответы
Ответ 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
), вам нужно избежать слэшей.