Как найти все появления текста после определенного слова? - PullRequest
0 голосов
/ 19 мая 2019

Я получаю строку вроде:

str = “Test/hello/filename/12345678/first
Hddhkhd
Hdhal
filename/1212abcd/second”

Я хочу получить массив всех строк, которые идут после «filename //», и я знаю, что после «/» есть 8 буквслово, которое я хочу получить.

В этом случае я хочу получить массив, который будет:

strArr = [“12345678”, “1212abcd”]

Как мне решить эту проблему?

Ответы [ 5 ]

2 голосов
/ 19 мая 2019

Вы также можете захватить в группе, совпадающей 8 раз, не косую черту или символ новой строки после соответствия /filename

\bfilename\/([^\/\n]{8})

Regex demo

Если выЕсли вы хотите соответствовать 8 или более раз, вы можете использовать {8,} вместо этого или если вы хотите соответствовать 1 или более раз, вы можете использовать +.

Если вы не хотите сопоставлять пробельные символы, вы можете изменить \n на \s

const regex = /filename\/([^\/\n]{8})/g;
const str = `Test/hello/filename/12345678/first
Hddhkhd
Hdhal
filename/1212abcd/second`;
let m;

while ((m = regex.exec(str)) !== null) {
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }
  console.log(m[1]);
}
1 голос
/ 19 мая 2019

Попробуйте сначала использовать это регулярное выражение:

filename\/\w{8}

и после этого отрежьте от результата это регулярное выражение:

\w{8}$

Сначала вы получите:

имя файла / 12345678

имя файла / 1212abcd

Второй вы получите:

12345678

1212abcd

1 голос
/ 19 мая 2019

Регулярное выражение, которое фиксирует 8 символов, следующих сразу за буквальным «filename //»:

/filename\/\/(.{8})/
0 голосов
/ 19 мая 2019

Вы можете использовать следующий код. Он будет соответствовать всем символам после filename/, пока не встретит другой /. После того, как вы получите совпадения в массиве, вы можете map вывести его и replace все filename/ с '':

let a = /filename\/[^\/]+/g;
let b = 'Test/hello/filename/12345678/first Hddhkhd Hdhal filename/1212abcd/second';
let c = b.match(a).map(x=>x.replace('filename/',''));
console.log(c);
0 голосов
/ 19 мая 2019

Для объяснения проверьте это REGEX

var arr = "Test/hello/filename/12345678/first Hddhkhd Hdhal filename/1212abcd/second".match(/(?<=filename\/)(.*?)(?=\/)/g);
console.log(arr)

ИЛИ

Для неподдерживаемых браузеров Lookbehinds используйте Array#map после регулярного выражения

var arr = "Test/hello/filename/12345678/first Hddhkhd Hdhal filename/1212abcd/second".match(/filename\/(.*?)\//g).map(i=> i.split('/')[1]);
console.log(arr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...