我已经看过 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/