只需使用正则表达式删除javascript中的最外层标记即可

时间:2018-03-12 07:21:32

标签: javascript regex

例如,我有字符串:

<template>
    <view class="container">{{title}}</view>
</template>

<custom>
    anything...
</cusomt>

我只想删除template / custom代码,并将代码保留在template / custom内。

Remove HTML Tags in Javascript with Regex中的方法将删除所有代码。

注意:我没有开发网页。我只是使用node来处理字符串。

2 个答案:

答案 0 :(得分:0)

由于这是Javascript,为什么不使用像document.getElementsByTagName('template')这样的东西,然后提取孩子?

var templateElements = document.getElementsByTagName('template');
var processedElements = [];

for (var i = 0; i < templateElements.length; i++) {
    var templateParent = templateElements[i];
    var children = templateParent.children;
    processedElements.push(children);
}

答案 1 :(得分:0)

您可以使用DOM Parser API,因为正则表达式不应解析XML或HTML,

let s = `<template>
    <view class="container">{{title}}</view>
</template>`;
let s1 = `<custom>
    anything...
</custom>`;
let d = new DOMParser();
let doc = d.parseFromString(s, 'application/xml');
let doc1 = d.parseFromString(s1, 'application/xml');
let r = doc.children[0].innerHTML;
console.log(r);
let r1 = doc1.children[0].innerHTML;
console.log(r1)

修改

当您在节点环境中时,我仍然建议您使用DOM解析库。

您也可以使用/\<.*\>([\s\S]*)\<\/.*\>/。此正则表达式不检查有效性,但假定提供的标记有效。

<强>演示

let s = `<template>
<view class="container">{{title}}</view>
</template>`;
let s1 = `<custom>
    anything...
</custom>`;
let re = /\<.*\>([\s\S]*)\<\/.*\>/
console.log(re.exec(s)[1].trim());
console.log(re.exec(s1)[1].trim());

<强> EDIT2

您也可以使用下面的cheerio: -

const cheerio = require('cheerio');
let s = `<template>
<view class="container">{{title}}</view>
</template>`;
let $ = cheerio.load('<div id="myid">' + s + '</div>');
console.log($('#myid>:nth-child(1)').html().trim());