Как я могу поставить [] (квадратные скобки) в JavaScript RegExp?
Я пытаюсь это сделать:
str = "bla [bla]";
str = str.replace(/\\[\\]/g,"");
console.log(str);
И замена не работает, что я делаю неправильно?
UPDATE: я пытаюсь удалить любые квадратные скобки в строке,
что странно, если я сделаю
replace(/\[/g, '')
replace(/\]/g, '')
он работает, но
replace(/\[\]/g, '');
нет.
Ответы
Ответ 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,'');