регулярное выражение - как сопоставить скобки, за которыми следуют не-ди git символы? - PullRequest
0 голосов
/ 10 февраля 2020

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

var string = "(1) foo? ANSWER: fee (2) fah. ANSWER: feh"

То, как я разбиваю строку на массив, выглядит следующим образом: .match:

const arr = string
  .match(/\(\d+[^(]+/g)
  });

Регулярное выражение в .match разбивает большую строку вопросов на массив строк. Как и сейчас, совпадение начинается с открывающей круглой скобки номера вопроса и соответствует всему до следующей открывающей скобки, которая является началом номера следующего вопроса. Таким образом, результирующий массив выглядит как

 ["(1) foo? ANSWER: fee", "(2) fah. ANSWER: feh"]

Это прекрасно работает, за исключением случаев, когда сам вопрос имеет круглые скобки:

var string = "(1) foo foo (faa) foo? ANSWER: fee (2) fah. ANSWER: fah" 

Функция .match в этом случае разделяет на (в (faa, который выбрасывает массив. Как я могу изменить выражение регулярного выражения так, чтобы оно совпадало с открывающими скобками, за которыми следовало бесконечное количество символов, не являющихся скобками, но совпадало с круглыми скобками, если за ним следует не git символ?

1 Ответ

0 голосов
/ 10 февраля 2020

Вы можете разделить, используя позицию, которая утверждает, что справа находятся одна или несколько цифр в скобках.

(?=\(\d+\))

См. regex demo

var string = "(1) foo foo (faa) foo? ANSWER: fee (2) fah. ANSWER: fah" 
console.log(string.split(/(?=\(\d+\))/g));
...