我必须使用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 = [];
并按照我建议的方式放置所有值,然后您可以检查该元素是否存在。
- 如果元素存在
$.inArray()
将返回找到的元素的索引。 - 如果不是,它将返回
-1
。 - 此外,如果您从特定的 dom 节点中挑选文本,您应该使用
$.trim()
。