jquery RegExp 函数问题



我必须使用jQuery RegExp在另一个字符串中搜索一个字符串。我尝试过遵循代码,但它不起作用。

var sup_spec = ($('#talent_type_sub_list1 li#'+$(this).val()+ '   p').html());          
var quote = 'jazz Dance (Contemporary), Garba (Folk), Ghomar (Folk)';
if (sup_spec.test(quote))
{
alert(quote);
}

字符串对象没有test方法,但Regex对象有。若要创建 Regex 对象,请使用RegExp构造函数:

var quote = new RegExp("jazz Dance");

或者,您可以使用正则表达式文本,如下所示:

var quote = /jazz Dance/;

注意:不要在它周围使用引号,因为这只会创建一个用斜杠包裹的普通字符串。

要了解两者之间的区别,请查看MDN上的这篇文章。

创建 Regex 对象后,可以调用其test方法并传入要搜索的字符串,如下所示:

quote.test(sup_spec)

这将返回True/False表示您的指针(正则表达式)是否与大海捞针(字符串)匹配。

如其他响应中所述,如果您不需要 Regex 的强大功能,则可以使用 String 对象的indexOf方法,该方法获取指针(您正在搜索的字符串)并返回它匹配的第一个位置,如果找不到它,则返回 -1。

看起来你不需要正则表达式,因为你正在寻找一个文字字符串。使用indexOf()

if (sup_spec.indexOf(quote) != -1) {
alert(quote);
}

Javascripttest()方法属于RegExp对象。我重新组织了您的代码以正确实现正则表达式。

/**
* Escapes regular expression special chars
* @see http://stackoverflow.com/a/6969486/760211
*/
function escapeRegExp(str) {
return str.replace(/[-[]/{}()*+?.\^$|]/g, "\$&");
}
var sup_spec = $('#talent_type_sub_list1 li#'+$(this).val()+ ' p').html();
var quote = "jazz Dance (Contemporary), Garba (Folk), Ghomar (Folk)";
var pattern = new RegExp('/' + escapeRegExp(quote) + '/');
if ( pattern.test(sup_spec) ) { alert( quote ); }

正如你提到的,你的问题没有javascript正则表达式,甚至你不需要它,你可以试试这个:

var sup_spec = $.trim($('#talent_type_sub_list1 li#'+$(this).val()+ ' p').html());          
var quote = ['jazz Dance (Contemporary)', 'Garba (Folk)', 'Ghomar (Folk)'];
if ($.inArray(sup_spec, quote) != -1){
alert(quote);
}

使其成为数组var quote = [];并按照我建议的方式放置所有值,然后您可以检查该元素是否存在。

  1. 如果元素存在$.inArray()将返回找到的元素的索引。
  2. 如果不是,它将返回-1
  3. 此外,如果您从特定的 dom 节点中挑选文本,您应该使用$.trim()

简短演示

最新更新