Как я могу получить слова из скобок с помощью регулярного выражения - PullRequest
0 голосов
/ 15 декабря 2018

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

Это мой код:

var patt = /(?!.+\))\w+/g;
var str = '( hello ) ehsan (how are) you' ;
console.log( patt.exec(str) ) ;
console.log( patt.exec(str) ) ;

Фактический результат

you , null

Ожидаемый результат

ehsan , you

Есть путь сквозь негативный взгляд?

Ответы [ 5 ]

0 голосов
/ 15 декабря 2018

У вас есть два варианта.Первый будет соответствовать всему в скобках, а затем все оставшиеся слова.После этого вы можете легко отфильтровать их:

var str = '( hello ) ehsan iran (how are) you';
console.log(
  str.match(/\([^()]*\)|\w+/g).filter(x => x[0] !== '(')
)

Второй подход заключается в обмане негативного взгляда:

var str = '( hello ) ehsan iran (how are) you';
console.log(
  str.match(/\w+(?![^()]*\))/g)
)

Первый подход надежен.Для второй необходимо, чтобы все скобки были соединены и правильно закрыты.

0 голосов
/ 15 декабря 2018

Приведенные ниже операторы дают ожидаемый выходной результат.

var patt = /(?!.+\))\w+/g;
var str = '( hello ) ehsan (how are) you' ;

var arr = str.split(/\([\w\s]*\)/);   // [ '', ' ehsan ', ' you' ]
var arr = arr.filter((s) => s!== ""); // [ ' ehsan ', ' you' ]

var s = ("" + arr).trim(); 
console.log(s); // ehsan , you
0 голосов
/ 15 декабря 2018

Простой способ решить это - split:

const input = '( hello ) ehsan (how are) you';
const output = input.split(/\(.+?\)/);

console.log(output);
console.log(output.filter(v => v));
console.log(output.filter(v => v).map(v => v.trim()));
0 голосов
/ 15 декабря 2018

Вы можете сделать это следующим образом

Сначала удалите все символы между (), а затем разделите их с помощью space.

var str = '( hello ) ehsan (how are) you' ;

let op = str.replace(/\(.*?\)/g, '').trim().split(/\s+/)
console.log(op);
0 голосов
/ 15 декабря 2018

Ваше регулярное выражение использует отрицательный прогноз (?!.+\), чтобы утверждать, что справа не закрывающая скобка.Это имеет совпадения с последнего вхождения закрывающей скобки, потому что после этого больше нет ).Затем вы соответствуете 1+ словам символов, которые будут соответствовать you.

Вместо использования отрицательного взгляда, вы можете использовать группу захвата:

\([^)]+\)\s*(\w+)

Regex demo

const regex = /\([^)]+\)\s*(\w+)/g;
const str = `( hello ) ehsan (how are) you`;
let m;

while ((m = regex.exec(str)) !== null) {
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }
  console.log(m[1]);
}

Если двигатель поддерживает lookbehind с принимает квантификаторы бесконечной длины, вы также можете использовать положительный lookbehind:

(?<=\([^()]+\)) (\w+)

const regex = /(?<=\([^()]+\))\s*(\w+)/g;
const str = `( hello ) ehsan (how are) you`;

while ((m = regex.exec(str)) !== null) {
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }
  console.log(m[1]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...