Захват всего между тегами <pre></pre> - PullRequest
0 голосов
/ 24 февраля 2019

Я читаю в файле .html:

<code>const htmlin = String(fs.readFileSync(inputHtml) || '');

const splitted = htmlin.split(/<pre.*>/);
splitted.shift();

const justPost = splitted.join('').split('
');justPost.pop ();

, но я ищу способ сопоставить весь текст в

<code>aaa <pre> xxx 
bbb
foo 
ccc

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

['aaa ', ' bbb ', ' ccc']

и

[' xxx ', ' foo ']

как я могу сделать это с помощью регулярных выражений или каким-либо другим методом?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Вместо использования регулярного выражения вы можете использовать dom или domparser.

Например, создайте div и установите для свойства innerHTML значение html.Затем зациклите дочерние узлы и получите innerHTML или textContent.

Например:

let htmlString = `aaa xxx 
bbb
foo 
ccc`, pre = [], text = [];let div = document.createElement ('div');div.innerHTML = htmlString;div.childNodes.forEach (x => {if (x.nodeType === Node.TEXT_NODE) ​​{text.push (x.textContent.trim ())} if (x.nodeName === "PRE") {pre.push (x.innerHTML.trim ());}});console.log (предварительно);console.log (текст);
0 голосов
/ 24 февраля 2019

Одним из способов является использование функции замены регулярных выражений и группы захвата.

<pre>(.*?)(?=<\/pre>)|(?:^|<\/pre>)(.*?)(?=$|<pre>)
  • <pre>(.*?)(?=<\/pre>) - Соответствует тексту между тегами pre.(g1)
  • (?:^|<\/pre>)(.*?)(?=$|<pre>) - сопоставляет текст из тегов pre.(g2)

let str = `aaa xxx 
bbb
foo 
ccc` let inner = [] let external = [] let op = str.replace (/
(.*?)(?=<\/pre>)|(?:^|<\/pre>)(.*?)(?=$|<pre>)/g, function (match,g1,g2){
  if(g1){
    inner.push(g1.trim())
  } 
  if(g2){
    outer.push(g2.trim())
  }
  return match
})

console.log(outer)
console.log(inner)</code>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...