регулярное выражение Строка соответствия внутри скобок, которая включает (или не включает) пробелы - PullRequest
1 голос
/ 14 января 2020

Как записать строку с помощью регулярного выражения, то есть а) внутри круглых скобок, включая скобки, и б) включает пробел (или, альтернативно, не включает пробел) внутри скобок, поэтому для захвата (test test), ( test), (test ), но не (test).

Я нашел похожую проблему здесь , которая использует выражение

\((?!\s)[^()]+(?<!\s)\)

, но с этим прогнозом / правило lookbehind просто ищет пробелы, которые прикреплены к скобкам. Как вы можете изменить это, чтобы искать каждое пространство внутри скобки?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 14 января 2020

Вы можете использовать /\([^)]* [^)]*\)/. Это соответствует 0 или более символов не закрывающих скобок, за которыми следует пробел, за которым следуют 0 или более символов не закрывающих скобок. Таким образом, он будет соответствовать "( )" и "( )", но не "()".

const s = "() ( test) (test) (test ) (    ) ( ) ( test ) (t est)";
console.log([...s.matchAll(/\([^)]* [^)]*\)/g)]);
0 голосов
/ 14 января 2020

Просто \([^()]+\) соответствует всему между парой скобок. Сюда входят пробелы и любые другие символы, кроме скобок (новой строки или).

(Предполагается, что диалект регулярных выражений, в котором необходимо экранировать буквальные символы Паренш, и плюс соответствует одному или нескольким повторениям. Соответствует ли класс отрицанных символов символу новой строки также является диалектно-указанным c.)

Если (как вы говорите в комментарии) вам требуется хотя бы один пробел, это легко добавить. Перефразировать: сопоставить открывающие скобки, ноль или более непробельных символов, не круглых скобок, один пробел, ноль или несколько символов без скобок (с пробелами тоже все в порядке) до закрывающей скобки.

\([^ ()]* [^())*\)
...