【问题标题】:JavaScript Extract HTML Tag from a StringJavaScript 从字符串中提取 HTML 标签
【发布时间】:2018-03-25 21:52:46
【问题描述】:

我有以下字符串:

let html = `<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml">
    <head>
        <title>Hello, world!</title>
    </head>
    <body>
        <p>Hello, world!</p>
    </body>
</html>`;

如何只提取开始的 HTML 标记?我只需要:

'<html xmlns="https://www.w3.org/1999/xhtml">'

如果这是最好的方法,请建议一个正则表达式。

【问题讨论】:

  • 到目前为止你有没有尝试过?

标签: javascript regex string match


【解决方案1】:

假设你想捕获&lt;html&gt;标签,你可以简单地使用/&lt;html.*&gt;/

这只是搜索&lt;html,后跟任意数量的字符,然后在下一个&gt;结束。

这可以在下面看到:

let html = `<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml">
    <head>
        <title>Hello, world!</title>
    </head>
    <body>
        <p>Hello, world!</p>
    </body>
</html>`;

console.log(html.match(/<html.*>/)[0]);

并在 Regex101 here 上看到。

【讨论】:

  • 我将正则表达式更改为 // 以禁用贪婪匹配。这样,如果字符串是,它就可以工作,例如: "w3.org/1999/xhtml"><head>." (第一个 > 后没有换行符)
  • 您还想使用更快的&lt;html[^&gt;]*&gt;。 @GTSJoe
  • @revo 除了速度还有什么区别?
  • 更好的性能来自[^&gt;]* 表示贪婪匹配但.*? 是非贪婪匹配的原因。前者一次消耗除&gt; 之外的所有字符,然后匹配&gt;,但后者一次消耗一个字符,直到达到&gt;。除了速度之外没有其他区别[^&gt;]* 也可以跨越多行。 @GTSJoe
【解决方案2】:

如果你只是想提取第二行,你可以将你的字符串通过 \n 分割并得到所需行的值

let html = `<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml">
    <head>
        <title>Hello, world!</title>
    </head>
    <body>
        <p>Hello, world!</p>
    </body>
</html>`;

var lines = html.split(/\n/g);
console.log(lines[1]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2013-08-09
    • 2012-01-19
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多