javascript - jquery match() 变量插值 - 复杂的正则表达式

标签 javascript jquery regex interpolation match

我已经看过 this ,这在一定程度上是有帮助的。

问题来了。我有一个通过用户点击传播到元素中的用户列表;像这样:

<div id="box">
    joe-user
    page-joe-user
    someone-else
    page-someone-else
</div>

点击时,我想确保用户尚未被点击进入 div。所以,我正在做类似的事情:

if ( ! $('#box').html().match(rcpt) )
{
   update_div();
}
else
{
   alert(rcpt+' already exists.');
}

但是,由于 javascript 对正则表达式缺乏插值,导致我的警报在选择 page-joe-user 然后用户选择 的用例中触发>joe-user,这显然不完全一样。

在 Perl 中我会做类似的事情:

if ( $rcpt =~ /^\Qrcpt\E/ )
{
    # code
}

我想做的就是将我的 match() 更改为:

if ( ! $('#box').html().match(/^rcpt/) )
{
    # code
}

if ( ! $('#box').html().match(rcpt) ) 似乎有点希望,但也失败了。使用 new RegExp() 在函数 IE $('#box').html().match(new RegExp('^'+收据))。我还尝试了 $('#box').html().match('/^'+rcpt'/')。我只能想象我错过了什么。我是 javascript 的新手。

我似乎无法在此站点上找到任何真正解决此类用例的内容。

TIA

最佳答案

match 函数只适用于字符串,不适用于 jQuery 对象。

最好的方法是将每个用户名放入一个单独的 HTML 标记中。

例如:

<ul id="users">
    <li>joe-user</li>
    <li>page-joe-user</li>
    <li>someone-else</li>
    <li>page-someone-else</li>
</ul>

然后您可以编写以下内容:

if($('#users li').is(function () { return $(this).text() === rcpt; }))

如果您想按自己的方式进行,您应该调用 text() 以获取元素内的字符串。 ($('#box').text().match(...))


编辑:使用 HTML 执行此操作的最佳方法是拆分字符串。

例如:

var userExists = false;
var users = $('#box').text().split(/\r?\n/);

for(var i = 0; i < users.length; i++) {   //IE doesn't have indexOf
    if (users[i] == rcpt) {
        userExists = true;
        break;
    }
}
if (userExists) {
    //Do something
}

这具有不易受到正则表达式注入(inject)攻击的额外好处。

关于javascript - jquery match() 变量插值 - 复杂的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1956184/

相关文章:

javascript - 如何使用正则表达式提取文本?

c++ - boost 非结构化字符串的 regex_search

javascript - 错误: Babel polyfill is required although its already installed

javascript - 是否有 CSS 或 Javascript 解决方案来更改当前页面导航选项卡的背景图像?

javascript - 如何使用谷歌脚本在字符串中查找文本?

javascript - jQuery 自动完成组合框 - 清除焦点上的选择

jquery - 如果 aria-expanded == true 使用 coffeescript 或 jquery 切换类

jquery - 区分 jQuery UI CSS 中的复选框、按钮和 radio

javascript - 如何重置 Highcharts 中图例区域的项目?

java - 正则表达式 - 包含多个下划线的单词