在匹配Jquery之后用正则表达式的一部分替换正则表达式

时间:2016-08-04 00:40:27

标签: jquery regex

我有以下html:

<span class='token-item' style='" + token_style + "'>" + token + "</span>

我想用字符串&#34;%&#34;替换整个字符串。 + token +&#34;%&#34;。

到目前为止,我得到了这个:

html.replace(/<span class=\"token-item\"[^>]*(.*)</span>/g, "%" + "\1" + "%" );

然而它不起作用。有没有办法用正则表达式的一部分替换正则表达式?

3 个答案:

答案 0 :(得分:0)

试试这个:

html.replace("/<span class='token-item'[^>]*?>(.*)</span>/g", "%" + "\1" + "%" );

我对你原来的一些做了一些细微的改动。原始正则表达式中的双引号中有token-item,但您的示例使用单引号。此外,正则表达式模式需要双引号。我通过在其后面添加[^>]*来使角色类?非贪婪。如果没有这个,我担心你的原始正则表达式会消耗所有内容,直到最后的<span>标记。

您可以在此处测试正则表达式:

<span class='token-item'[^>]*?>(.*)</span>

Regex101

答案 1 :(得分:0)

您可以重复搜索字符串中的span元素,获取第一个匹配项,然后使用另一个正则表达式在匹配项中获取该标记,然后使用该标记替换第一个匹配项。执行此操作直到在字符串中找不到span元素。

<script type="text/javascript">
    function replaceWithToken(input) {
        var spanEx = /<span class='token-item'[^>]*>[^<>]*<\/span>/;
        var tokenEx = />.*</;
        var output = input;
        while (true) {
            var matches = spanEx.exec(output);

            //if no more span element found, stop
            if (matches == null || matches.length == 0)
                break;

            var span = matches[0];
            //get the token from the match, in the form of >token<
            var token = tokenEx.exec(span)[0];

            //remove the > and < and add % in front and back
            token = '%' + token.substring(1, token.length - 1) + '%';

            //replace the first match with the token
            output = output.replace(span, token);
        }

        return output;
    }
    var input = "<span class='token-item' style='token_style'>this is the first token</span>"
        + "<br /><span class='token-item'>this is the second token</span>";
    var output = replaceWithToken(input);
    console.log(input);
    console.log(output);
</script>

答案 2 :(得分:0)

您也可以使用此正则表达式:/<span class=\'token-item\'[^>]*?>.*?(\w+).*?<\/span>/g

Demo and Explain

代码示例:

token = "sampleToken";
token_style = "none;"

html = "<span class='token-item' style='" +token_style+ "'>" + token +"</span>";
re = /<span class=\'token-item\'[^>]*?>.*?(\w+).*?<\/span>/g;

console.log(html);
console.log(html.replace(re,"%$1%"));