JavaScript | Как экранировать круглую скобку в регулярных выражениях?

JavaScript | Как экранировать круглую скобку в регулярных выражениях?

 

Есть строка:

var stroka = "BlaBla(Bla)"

Нужно удалить символ круглой скобки при помощи регулярного выражения. В чём тут проблема?

Если мы попытаемся применить стандартную дизъюнкцию по символу круглой скобки ( , то получим сообщение об ошибке:

var s2 = stroka.replace(/(/,'')
Круглая скобка не экранирована в регулярном выражении - ошибка - JavaScript
Круглая скобка не экранирована в регулярном выражении — ошибка — JavaScript

Так происходит потому, что символы скобок могут являться частью конструкций регулярных выражений. Например, частью Утверждений (Assertion).

 

Чтобы избежать подобной ошибки, нужно использовать экранирующий символ — обратная косая линия \ перед круглой скобкой.

В нашем случае внутрь регулярного выражения нужно поместить конструкцию:

\(

Общий вид регулярного выражения станет

/\(/

Теперь пробуем произвести замену символа «левой круглой скобки» в строке.

var s2 = stroka.replace(/\(/,'')
Удалили левую круглую скобку из строки - экранировали - JavaScript
Удалили левую круглую скобку из строки — экранировали — JavaScript

Получим новую строку без одной круглой скобки — «BlaBlaBla)»

В строке осталась правая круглая скобка. Удалим её аналогичным образом. Внутрь регулярного выражения нужно поместить конструкцию:

\)

Общий вид регулярного выражения станет

/\)/

Теперь пробуем произвести замену символа «левой круглой скобки» в строке.

var s3 = s2.replace(/\)/,'')
Удалили правую круглую скобку из строки - экранировали - JavaScript
Удалили правую круглую скобку из строки — экранировали — JavaScript

 

Как удалить две скобки одновременно (в одном регулярном выражении)?

Чтобы сразу удалить две круглые скобки из строки, нужно использовать два условия в одном регулярном выражении. В этом нам поможет оператор вертикальной линии | , который разделяет две альтернативы. Для простоты понимая мы добавим каждое из условий в круглые скобки самого синтаксиса регулярного выражения и разделим их оператором |.

Первое условие:

(\))

Второе условие:

(\()

Два условия вместе:

(\))|(\()

Два условия в одном регулярном выражении:

/(\))|(\()/

Добавляем глобальный флаг к регулярному выражению

/(\))|(\()/g

Замена символов в строке:

var stroka = "BlaBla(Bla)"
var s4 = stroka.replace(/(\))|(\()/g,'')
Выполнили два экранирующих условия в одном регулярном выражении - JavaScript
Выполнили два экранирующих условия в одном регулярном выражении — JavaScript

Результат работы:

"BlaBlaBla"

 

Такой результат можно было получить иным способом (немного сократив запись):

var stroka = "BlaBla(Bla)"
var s5 = stroka.replace(/(\(|\))/g,'')

"BlaBlaBla"
Две альтернативы в одних круглых скобках - JavaScript
Две альтернативы в одних круглых скобках — JavaScript

Здесь две альтернативы заключены в одни круглые скобки, а не в две как в прошлом примере.

 

Информационные ссылки

JavaScript | Флаги регулярных выражений

JavaScript | Регулярные выражения | Утверждение (Assertion)

Стандарт ECMAScript — Раздел «22.2.2.3 Disjunction» — https://tc39.es/ecma262/#sec-disjunction