Как сформировать регулярное выражение, чтобы все соответствовало с точностью до "(" - PullRequest
0 голосов
/ 23 марта 2020

В javascript, как можно сформировать регулярное выражение, чтобы соответствовать всему до и НЕ включая открывающую скобку "("?

пример ввода:

"12(pm):00" "12(am):))" "8(am):00"

Я нашел /^(.*?)\(/ успешным с частью "до", но возвращенное совпадение включает в себя "("

В regex101.com, это говорит, что первый Захват группы - это то, что я ищу, есть ли способ вернуть только захваченную группу?

Ответы [ 2 ]

3 голосов
/ 23 марта 2020

Есть три способа справиться с этим. Во-первых, нужно ограничить символы, которые вы соответствуете, чтобы не включать скобки:

let match = "12(pm):00".match(/[^(]*/);
console.log(match[0]);

Второй - получить только интересующую вас часть матча, используя группы захвата:

let match = "12(pm):00".match(/(.*?)\(/);
console.log(match[1]);

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

let match = "12(pm):00".match(/.*?(?=\()/);
console.log(match[0]);

Как и в OP, обратите внимание на не жадный модификатор во втором и третьем случае: необходимо ограничить квантификатор в случае, если внутри строки есть еще одна открытая скобка , Во-первых, в этом нет необходимости, поскольку квантификатору явно запрещено сожирать скобки.

1 голос
/ 23 марта 2020

Try

^\d+

^ устанавливает позицию в начале строки

\d соответствует di git (равно [0-9])

+ Квантификатор - сопоставляет от одного до неограниченного числа раз, столько раз, сколько возможно, возвращая при необходимости (жадный)

https://regex101.com/r/C9XNT4/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...