我正在读取.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/