增量正则表达式过滤器

发布于 2024-11-15 12:36:20 字数 672 浏览 2 评论 0原文

我有一长串 标签,我想实时过滤它们;即删除不匹配的。我会根据输入字段中的文本输入来过滤它们。正则表达式显然会搜索 a 标签内容以查找与输入字段的匹配,但我想知道如何使其更漂亮,并像谷歌的搜索栏现在那样主动过滤列表。我想,按键功能会触发正则表达式功能。

我不知道该怎么做的部分是:

[input field]ArI[/]

列表:

• ArIes
• ArIstotle

即如何让它检查列表项的第 n 个字母。

编辑

这是我到目前为止所拥有的,但它不起作用。

$("input.CardName_Input").keyup(function() {
    var getPhrase = $(".CardName_Input").val();

    new RegExp('^' + getPhrase + '.', 'i');

    $("#Results a").each(function() {
        if (!($(this).val().match(RegExp))) {
            $(this).addClass("HIDE");
        }
    })
});

I have a long list of <a> tags, and i'd like to filter through them live; that is, to remove the ones that don't match. I'd filter through them based on the text input in an input field. Regex would obviously search the a tag contents for a match to the input field, but i was wondering how to make it fancier, and actively filter the list like google's search bar does these days. I imagine, a key up function would trigger the regex function.

The part i don't know how to do is this:

[input field]ArI[/]

List:

• ArIes
• ArIstotle

i.e., how to make it check the nth letter of the list item.

EDIT

This is what i have so far, and it doesn't work.

$("input.CardName_Input").keyup(function() {
    var getPhrase = $(".CardName_Input").val();

    new RegExp('^' + getPhrase + '.', 'i');

    $("#Results a").each(function() {
        if (!($(this).val().match(RegExp))) {
            $(this).addClass("HIDE");
        }
    })
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无风消散 2024-11-22 12:36:20

据我了解,您只需检查每个列表项字符串的开头?

那么你可以使用类似 /^Ar./i 作为表达式吗?

在您的情况下,您可以动态构建 RegExp new RegExp('^' + searchString + '.', 'i')

As far as I understand you just have to check for the beginning of each list item string?

Then you could use something like /^Ar./i as expression?

In your case you could build the RegExp dynamically new RegExp('^' + searchString + '.', 'i')

心的位置 2024-11-22 12:36:20

这是我到目前为止所拥有的,但它不起作用。

该代码构造了一个new RegExp,但实际上并没有用它做任何事情。然后它将 RegExp (函数)传递给 match。您需要将正则表达式分配给一个变量,以便可以使用它,并将 that 传递给 match

$("input.CardName_Input").keyup(function ()
{
    var getPhrase = $(".CardName_Input").val(),
        re = new RegExp('^' + getPhrase + '.', 'i');

    $("#Results a").each(function ()
    {
        var $this = $(this);
        if (!$this.val().match(re)) $this.addClass("HIDE");
    })
});

NB 如果您不想要特殊的.CardName_Input 中的字符要破坏您的代码,您需要 转义getPhrase

This is what i have so far, and it doesn't work.

The code constructs a new RegExp but doesn't actually do anything with it. Then it passes RegExp (a function) to match. You need to assign the regexp to a variable so you can use it, and pass that to match:

$("input.CardName_Input").keyup(function ()
{
    var getPhrase = $(".CardName_Input").val(),
        re = new RegExp('^' + getPhrase + '.', 'i');

    $("#Results a").each(function ()
    {
        var $this = $(this);
        if (!$this.val().match(re)) $this.addClass("HIDE");
    })
});

N.B. if you don't want special characters in the .CardName_Input to break your code, you'll need to escape getPhrase.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文