Как я могу сопоставить повторяющиеся подстроки с регулярным выражением? - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь найти регулярное выражение в JavaScript, которое заменит несколько экземпляров одного и того же строкового шаблона.

Допустим, у меня есть следующая строка:

<li>item 1</li><li>item 2</li><li>item 3</li>

Между каждым элементом списка нет символа новой строки, и я хочу сопоставить каждый отдельный элемент списка (например, item 1, item 2, item 3).

В настоящее время Мне только удалось заставить это соответствовать целой строке, используя /<li>(.*)<\/li>/g

Есть ли способ сделать это в javascript регулярном выражении?

Ответы [ 3 ]

1 голос
/ 17 января 2020

Правильный способ сделать это - проанализировать строку и использовать функции управления DOM Javascript.

var htmlString = '<li>item 1</li><li>item 2</li><li>item 3</li>'
var parser = new DOMParser();
var htmlDocument = parser.parseFromString(htmlString, 'text/html');

htmlDocument .querySelectorAll('li').forEach(el => {
  console.log(el.innerText);
});
1 голос
/ 16 января 2020

Совпадение последовательности символов, которые не являются < или > ([^<>]+) и имеют после него символ < (+(?=<)) (см. regex101 ):

const str = '<li>item 1</li><li>item 2</li><li>item 3</li>'

const result = str.match(/[^<>]+(?=<)/g)

console.log(result)
0 голосов
/ 16 января 2020

Вы можете сделать что-то вроде /<*.li>/gm. str.replace(/<*.li>/gm, ' ') даст вам строку, содержащую только элементы

https://regex101.com/r/FG9Y7k/1

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

edit: Если вы хотите сопоставить только внутри тегов, вот еще один https://regex101.com/r/qPtSBi/1 /(?<=\>)(.*?)(?=<)/g

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