RegEx-获得最短的比赛

时间:2018-10-21 10:57:10

标签: javascript regex

我有以下HTML文本:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Page Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" media="screen" href="main.css" />
    <script src="main.js" defer></script>
</head>
<body>
    <p> hello with JSON</p>
    <button id="btn">click me!</button>
</body>
</html>

我正在尝试使用RegEx模式定位零件:

> <div class=WordSection1><p class=MsoNormal dir=RTL><span lang=HE style='font-family:"Arial",sans-serif;color:#1F497D'>Hi</span><span dir=LTR style='color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal dir=RTL><span dir=LTR style='color:#1F497D'><o:p>&nbsp;</o:p></span></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal dir=RTL style='line-height:normal'><b><span dir=LTR>From</span></b><span dir=RTL></span><b><span lang=HE><span dir=RTL></span>:</span></b><span lang=HE> </span><span dir=LTR>Some Guy</span><span dir=RTL></span><span lang=HE><span dir=RTL></span> <br></span><b><span dir=LTR>Sent</span></b><span dir=RTL></span><b><span lang=HE><span dir=RTL></span>:</span></b><span lang=HE> </span><span dir=LTR>Tuesday, October 16, 2018 5:02 PM</span><span lang=HE><br></span><b><span dir=LTR>To</span></b><span dir=RTL></span><b><span lang=HE><span dir=RTL></span>:</span></b><span lang=HE> </span><span dir=LTR>Other Guy</span><span dir=RTL></span><span lang=HE><span dir=RTL></span>‏ &lt;</span><span dir=LTR>otherguy@domain.com</span>

enter image description here

我正在使用的RegEx模式是:

<span dir=LTR>From</span>

我要解决的问题是,上述模式比我要标记的部分匹配文本的更大部分。

我的问题是,如何使用正则表达式找到最短的匹配项。

查看实际比对(标记)和所需比对(双标记)的图片。

1 个答案:

答案 0 :(得分:0)

正则表达式将始终与最左边的匹配项匹配。虽然可以让正则表达式稍后开始,但是您不能强制非最左匹配。

在您的情况下,您可以通过在Actual Score之后禁止使用任何50(例如)来使匹配更具体:

Score Category

如果您的属性包含(未转义的)100,则此操作将中断。

此外,您不应使用正则表达式来解析HTML。参见RegEx match open tags except XHTML self-contained tags