我已经查看了这个,在某些方面它是有帮助的。
问题在于,我有一个用户列表通过用户点击传递到一个元素中;类似这样:
<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('^'+rcpt))
。我还尝试过 $('#box').html().match('/^'+rcpt'/')
。我只能想象我漏掉了什么。我对 JavaScript 还是很陌生的。
我似乎找不到任何真正解决此类用例的东西,在这个网站上。
TIA
rcpt
在我的代码中实际上不是一个对象,它只是一个变量。然而,我会考虑你的回复作为解决这个问题的一种方法。 - Jimrcpt
是一个变量,只需删除引号。请注意大小写敏感。如果不希望如此,请调用toUpperCase
。 - SLaksjoe-user
与page-joe-user
混淆了。因此,为了复制这个问题...以page-joe-user
和joe-user
为例:$('#element').html().match(rcpt)
大多数情况下都可以工作,但如果我先点击page-joe-user
,然后再尝试点击joe-user
,那么match()会触发一个匹配,而实际上它们并不匹配(或者说我不希望它们匹配)。如果我反过来点击它们,那么一切都正常。因此,为了缓解这个问题,我想要锚定我的正则表达式,因为这看起来像是典型的正则表达式贪婪性。 - Jim