У меня проблемы с поиском. В некотором коде я вижу
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
/[\[]/
выглядит как 1 параметр. Что делают символы? Похоже, что он заменяет [] на \[\]
, но что конкретно делает /[\[]/
?
У меня проблемы с поиском. В некотором коде я вижу
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
/[\[]/
выглядит как 1 параметр. Что делают символы? Похоже, что он заменяет [] на \[\]
, но что конкретно делает /[\[]/
?
Синтаксис /…/
- это синтаксис регулярного выражения . И регулярное выражение [\[]
описывает класс символов ([…]
), который является только символом [
). Итак, /[\[]/
- это регулярное выражение, описывающее одиночный [
.
Но поскольку глобальный флаг не задан (поэтому заменяется только первое совпадение), все это можно заменить на это (возможно, легче читать):
name.replace("[", "\\[").replace("]","\\]")
Но если все совпадения следует заменить, я бы, вероятно, использовал это:
name.replace(/([[\]])/g, "\\$1")
Это регулярное выражение, которое соответствует символу левой квадратной скобки.
Это странный способ сделать это; в общем, похоже, что код пытается поставить обратную косую черту перед квадратными скобками в строке, что также можно сделать следующим образом:
var s2 = s1.replace(/\[/g, '\\[').replace(/]/g, '\\]');
Я думаю.
/[[]/определил диапазон символов, который включает только символ ']' (экранированный), вы правы, который заменен [] на [].
[]
находится в самом регулярном выражении, используемом для обозначения набора совпадающих символов. Если вы хотите представить фактическое [
или ]
в регулярном выражении, вам нужно сбежать от него \
, следовательно, [\[]
и [\]]
. Ведущий и конечный /
являются лишь частью стандартного синтаксиса JS для обозначения шаблона регулярного выражения.
В конце концов, он заменяет [
на \[
, а затем заменяет ]
на \]
.