Что / [\ [] / делает в JavaScript?

10

У меня проблемы с поиском. В некотором коде я вижу

name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");

/[\[]/ выглядит как 1 параметр. Что делают символы? Похоже, что он заменяет [] на \[\], но что конкретно делает /[\[]/?

  • 2
    Реальный вопрос в том, почему они используют класс символов, чтобы соответствовать одному [
  • 0
    @friedo Думаю, они не знают, что такое [...] класс персонажей
Теги:

4 ответа

11
Лучший ответ

Синтаксис /…/ - это синтаксис регулярного выражения . И регулярное выражение [\[] описывает класс символов ([…]), который является только символом [). Итак, /[\[]/ - это регулярное выражение, описывающее одиночный [.

Но поскольку глобальный флаг не задан (поэтому заменяется только первое совпадение), все это можно заменить на это (возможно, легче читать):

name.replace("[", "\\[").replace("]","\\]")

Но если все совпадения следует заменить, я бы, вероятно, использовал это:

name.replace(/([[\]])/g, "\\$1")
10

Это регулярное выражение, которое соответствует символу левой квадратной скобки.

Это странный способ сделать это; в общем, похоже, что код пытается поставить обратную косую черту перед квадратными скобками в строке, что также можно сделать следующим образом:

var s2 = s1.replace(/\[/g, '\\[').replace(/]/g, '\\]');

Я думаю.

3

/[[]/определил диапазон символов, который включает только символ ']' (экранированный), вы правы, который заменен [] на [].

  • 0
    hrm ... заменяет [и] их экранированными версиями
2

[] находится в самом регулярном выражении, используемом для обозначения набора совпадающих символов. Если вы хотите представить фактическое [ или ] в регулярном выражении, вам нужно сбежать от него \, следовательно, [\[] и [\]]. Ведущий и конечный / являются лишь частью стандартного синтаксиса JS для обозначения шаблона регулярного выражения.

В конце концов, он заменяет [ на \[, а затем заменяет ] на \].

  • 0
    Я думаю, внутри [] a [не является метасимволом. [[] является допустимым классом char, который соответствует только [

Ещё вопросы

Сообщество Overcoder
Наверх
Меню