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

Как я могу поставить [] (квадратные скобки) в JavaScript RegExp?

Я пытаюсь это сделать:

str = "bla [bla]";
str = str.replace(/\\[\\]/g,"");
console.log(str);

И замена не работает, что я делаю неправильно?

UPDATE: я пытаюсь удалить любые квадратные скобки в строке, что странно, если я сделаю

replace(/\[/g, '')
replace(/\]/g, '')

он работает, но
 replace(/\[\]/g, '');
нет.

4b9b3361

Ответ 1

Это должно быть:

str = str.replace(/\[.*?\]/g,"");

Вам не нужна двойная обратная косая черта (\), потому что это не строка, а инструкция regex, если вы создаете регулярное выражение из строки, в которой вам нужна двойная обратная косая черта;).

Он также буквально интерпретировал 1 (что не соответствовало). Использование .* означает любое значение между квадратными скобками.

Новая версия строковой версии RegExp будет выглядеть следующим образом:

str=str.replace(new RegExp("\\[.*?\\]","g"),"");

UPDATE: Чтобы удалить только квадратные скобки:

str = str.replace(/\[(.*?)\]/g,"$1");

Ваш код выше не работает, потому что он пытается сопоставить "[]" (последовательно без каких-либо разрешений между ними). Мы можем обойти это путем нежелательного сопоставления групп ((.*?)) между квадратными скобками и использованием обратной ссылки ($1) для замены.

ОБНОВЛЕНИЕ 2: Чтобы удалить несколько квадратных скобок

str = str.replace(/\[+(.*?)\]+/g,"$1");
// bla [bla] [[blaa]] -> bla bla blaa
// bla [bla] [[[blaa] -> bla bla blaa

Обратите внимание, что это не соответствует количеству открытий/закрытий, просто удаляет все последовательные открытия и закрывает. Также, если в последовательных скобках есть разделители (пробелы и т.д.), Они не будут совпадать.

Ответ 2

Вам нужно выйти из скобки, например \[ и \]. Проверьте http://regexpal.com/. Это довольно полезно:)

Чтобы заменить все скобки в строке, это должно выполнить задание:

str.replace(/\[|\]/g,'');

Надеюсь, это поможет. Христо

Ответ 3

Две обратные косые черты вызывают единую обратную косую черту, поэтому вы ищете "обратную косую черту", ​​за которой следует класс символов, состоящий из 1 или right bracket, а затем у вас отсутствует закрывающая скобка.

Try

str.replace(/\[1\]/g, '');

Ответ 4

Что именно вы пытаетесь сопоставить?

Если вы не избегаете скобок, они считаются классами символов. Это:

/[1\\]/

Соответствует либо 1, либо обратная косая черта. Вы можете избежать их только одним обратным слэшем:

/\[1\]/

Но это тоже не будет соответствовать, поскольку в вашей строке нет [1].

Ответ 5

Я наткнулся на этот вопрос, имея дело с экранированием квадратных скобок в классе символов, который был разработан для использования с проверкой пароля, требующей наличия специальных символов.

Обратите внимание на двойной выход:

var regex = new RegExp('[\\]]');

Как упоминает @rudu, это выражение находится внутри строки, поэтому оно должно быть дважды экранировано. Обратите внимание, что тип цитирования (одинарный/двойной) здесь не имеет значения.

Вот пример использования квадратных скобок в классе символов, который проверяет все специальные символы, найденные на моей клавиатуре:

var regex = new RegExp('[-,_,\',",;,:,!,@,#,$,%,^,&,*,(,),[,\\],\?,{,},|,+,=,<,>,~,',\\\\,\,,\/,.]', 'g')

Ответ 6

попробуй это

str.replace(/[\[\]]/g,'');