我正在读取.html文件:

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

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

const justPost = splitted.join('').split('</pre>');
justPost.pop();


但我正在寻找一种匹配其中所有文本的方法

aaa <pre> xxx </pre> bbb <pre> foo </pre> ccc


并匹配外面的文字。这样我就可以得到两个数组:

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




[' xxx ', ' foo ']


我该如何使用正则表达式或其他方法呢?

最佳答案

一种方法是使用正则表达式替换功能和捕获组。

<pre>(.*?)(?=<\/pre>)|(?:^|<\/pre>)(.*?)(?=$|<pre>)



<pre>(.*?)(?=<\/pre>)-匹配pre标记之间的文本。 (g1)
(?:^|<\/pre>)(.*?)(?=$|<pre>)-匹配pre标记中的文本。 (g2)




let str = `aaa <pre> xxx </pre> bbb <pre> foo </pre> ccc`
let inner = []
let outer = []

let op = str.replace(/<pre>(.*?)(?=<\/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)

关于javascript - 捕获<pre> </pre>标记之间的所有内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54848648/

10-13 03:47