使用RegExp动态创建正则表达式,并过滤内容

21

我在使用RegExp对象时遇到了困难,想要动态创建一个表达式,并将其应用于一组元素。

这里是一个 jsFiddle,以下是代码:

<div id='selectors'><span>A-F</span><span>G-L</span><span>M-S</span><span>T-Z</span></div>

<a hreh=#>Astring</a>
<a hreh=#>Cstring</a>
<a hreh=#>Xstring</a>
<a hreh=#>Dstring</a>
<a hreh=#>Zstring</a>

$('div#selectors span').click(function(){
        expression = "/^["+$(this).html()+"].*$/";

        rx = RegExp(expression,'i');
        console.log(rx,'expression');
        $("a").each(function(){

                    if($(this).html().match(rx) !== null){
                        $(this).addClass('selected');
                    }
        });

    })
1个回答

48

JavaScript会自动在表达式的开头和结尾添加“/”。从您的字符串中删除它们,此处有示例

$('div#selectors span').click(function () {
    var expression = "^[" + $(this).html() + "].*$";
    var rx = new RegExp(expression, 'i');

    console.log(rx, 'expression');

    $("a").each(function () {
        if ($(this).html().match(rx) !== null) {
            $(this).addClass('selected');
        }
    });

});

14
更准确地说,斜杠/表示正则表达式字面量,但本身不是正则表达式的一部分,就像双引号"表示字符串字面量,但本身不是字符串的一部分。 - Phrogz
不要忘记,当正则表达式使用 \ 斜杠时,需要将其转义为 \。 - Jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接