Извлечь текст в регулярное выражение в Javascript - PullRequest
0 голосов
/ 19 декабря 2018

В Javascript я хочу извлечь массив из строки.Строка:

var str = "abc (24 314 83 383)(-256)sa 0 (24 314) 1"

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

result[0] = "abc"
result[1] = "24 314 83 383"
result[2] = "-256"
result[3] = "sa"
result[4] = "0"
result[5] = "24 314"
result[6] = "1"

Я пытался

var pattern = /(.*?)[\s|\)]/g;
result = str.match(pattern);

, но результат был: abc ,(24 ,314 ,83 ,383),(-256),sa ,0 ,(24 ,314),

Ответы [ 3 ]

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

Вот решение с использованием объекта регулярных выражений и exec, что безопаснее, чем отфильтровывать скобки с помощью чего-то вроде str.match(/\w+|\((.*?)\)/g).map(e => e.replace(/^\(|\)$/g, "")):

var str = "abc (24 314 83 383)(-256)sa 0 (24 314) 1";
var reg = /\w+|\((.*?)\)/g;
var match;
var res = [];

while (match = reg.exec(str)) {
  res.push(match[1] || match[0]);
}

console.log(res);
0 голосов
/ 19 декабря 2018

Вы можете попробовать это:

let str = "abc (24 314 83 383)(-256)sa 0 (24 314) 1";
let replaced = str.replace(/(\s*\(|\))/g, '<REP>');
let arrFromStr = replaced.split('<REP>').filter(w => w.length != 0);

Переменная «replace» заменяет все 1) 0 или более пробелов + «(» и 2) все символы «)» на строку «».arrFromStr создает массив из строки и разделяет его с помощью "".Затем мы проверяем, является ли элемент массива пустым или нет.

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

попробуйте это:

var str = "abc (24 314 83 383)(-256)sa 0 (24 314) 1"
var pattern = /\((.*?)\)|\s?(\S+)\s?/g;
var result = str.match(pattern).map(v => v.trim().replace(/^\(|\)$/g, ''));
console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...