Как я могу захватить регулярное выражение, основанное на другой ситуации? - PullRequest
0 голосов
/ 05 сентября 2018

В настоящее время я пытаюсь реализовать интерполяцию строк для моего языка.

Интерполяция строк выглядит примерно так:

let x = " Baby"
let message = "Hello $(x)"

Мое текущее регулярное выражение для захвата интерполированного выражения:

const regex = /[$][(].*?[)]/g;

Однако приведенное выше регулярное выражение хорошо работает с выражениями без скобок, но не работает должным образом, когда интерполированное выражение имеет квадратные скобки, например:

let message = "My number is $(square(1+2))"
// the captured group would be `$(square(1+2)` , which is missing a bracket

Я не мог использовать жадные квантификаторы. Если нет, он не будет работать, если имеется более одного интерполированного выражения, например:

let message = "My number is $(x) $(y) $(z)"
// if capture greedily, it would be `$(x) $(y) $(z)`, which is not desired

Как жадно захватывать интерполированные выражения, основанные на ситуациях?

Примечание. Я ищу ответ в JavaScript.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

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

Для сценария 3:

'[$][(].*?[\)]+' будет захватывать '$(x)' '$(y)' '$(z)' по-другому. Имею ввиду индивидуальный матч.

'[$][(].*[\)]+' захватит '$(x) $(y) $(z)' как одну строку. Целая строка.

Пожалуйста, дайте мне знать, если это работает.

0 голосов
/ 05 сентября 2018

Вы можете использовать шаблонную строку (или буквенную строку), как это

let x = 1, y = 2, z = 3;
console.log(`Mu number ${x} ${y} ${z}`);
...