JavaScript Regex для явного выбора элемента между двумя группами? - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть строка, подобная приведенной ниже;

имя функции foo () foo

Мне нужно регулярное выражение, которое может соответствовать всем символам (включая белый)-пространство) между двумя группами function и (.

То есть, я хочу регулярное выражение, которое соответствует только "name" в строке "foo function name () foo"

Я пытался использовать код регулярного выражения, как;

\function(.*?)\(\g

, но, похоже, он возвращает function name (

Я сделал демо здесь https://regexr.com/4le5h

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

Ответы [ 3 ]

2 голосов
/ 21 сентября 2019

Вы можете искать не пробел и открывающую скобку, а затем пробел и открывающую скобку.

var string = 'foo function name () foo',
    match = string.match(/function\s+([^\s)]+)(?=\s*\()/)[1];

console.log(match);
2 голосов
/ 21 сентября 2019

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

enter image description here

let str = "foo function name () foo"
let matched = str.match(/\bfunction\s*([^(]+)\s*\(/)

console.log(matched[1])

Если вы работаете в среде, которая поддерживает или ищет обходные пути, тогда вы можете просто сделать

let str = "foo function name () foo"
let matched = str.match(/(?<=\bfunction\s*)([^(]+)(?=\s*\()/)

console.log(matched[1])
1 голос
/ 21 сентября 2019

Вы можете использовать положительный вид сзади для соответствия function.

(?<=function +)[^ ]+
  • (?<=function +) = искать что-то после "функции" и один или несколько пробелов
  • [^ ]+ = соответствует всему, что не является пробелом один или несколько раз

Соответствует "name" в вашем примере.

https://regex101.com/r/euqBSk/4

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