Javascript,正则表达式,反向匹配

时间:2014-03-02 00:08:20

标签: javascript regex

我尝试使用js regex获得以下内容:

string</span>string</span>string</span>theStrngIWant

在一句话中,我尝试在最后</span>

之后获得包括新行在内的任何字符

我尝试了这种模式/<\/span>((.|\n)*)/i,我知道模式不起作用我只是想展示我想要捕捉的内容:

所以在最后</span>之后我想要捕获.令牌中包含的任何内容,并且因为它不包含我添加\n的新行,我认为没有{greedy可以使用{ {1}}因为它无论如何都是字符串的结尾,还要注意我确实尝试过负面预测。

如果有人知道这个案例的任何正则表达式,我将非常感激。

1 个答案:

答案 0 :(得分:2)

不使用Regex解析HTML

首先,如果您决定使用正则表达式为任何生产/重要代码解析HTML,那么您会遇到麻烦。

也就是说,对于非批评粗略的编辑目的,HamZa的模式运作得很好。这是一个经过测试的JavaScript函数形式的稍微复杂,但更有效的模式:

function processText(text) {
/*  # Capture in $1, everything following last SPAN element.
    <\/span\s*>        # Last SPAN close tag.
    (                  # $1: Everything after last SPAN.
      [^<]*            # Zero or more non start-of-tag chars.
      (?:              # Zero or more non-SPAN tags.
        <              # Allow start of any HTML tag, but
        (?!\/?span\b)  # only if not start a SPAN tag.
        [^<]*          # Zero or more non start-of-tag chars.
      )*               # End zero or more non-SPAN tags.
    )                  # End $1: Everything after last SPAN.
    $                  # Anchor to end of string.
*/
    var re = /<\/span\s*>([^<]*(?:<(?!\/?span\b)[^<]*)*)$/i;
    var m = text.match(re);
    return (m) ? m[1] : '';
}

还在自由间隔模式下呈现正则表达式(作为多行注释),其中缩进和注释描述每个一口大小的正则表达式块。

学习正则表达式

有关如何编写好的正则表达式的更多信息,我建议您阅读以下内容:regular-expressions.info/。如果您想成为一名正则表达式大师,那么您可以通过以下方式获得良好的服务:Mastering Regular Expressions (3rd Edition)