我试图得到一个不区分大小写的搜索与JavaScript工作的两个字符串。
通常是这样的:
var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);
/i标志不区分大小写。
但我需要寻找第二根弦;如果没有国旗,它就完美了:
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);
如果我在上面的例子中添加/ I标志,它将搜索searchstring,而不是变量“searchstring”中的内容(下一个例子不工作):
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);
我怎样才能做到这一点呢?
我注意到,如果用户输入了一个文本字符串,但在没有选择任何自动完成选项的情况下离开输入,则隐藏输入中不会设置任何值,即使字符串与数组中的字符串重合。
所以,在其他答案的帮助下,我做出了这个:
var $local_source = [{
value: 1,
label: "c++"
}, {
value: 2,
label: "java"
}, {
value: 3,
label: "php"
}, {
value: 4,
label: "coldfusion"
}, {
value: 5,
label: "javascript"
}, {
value: 6,
label: "asp"
}, {
value: 7,
label: "ruby"
}];
$('#search-fld').autocomplete({
source: $local_source,
select: function (event, ui) {
$("#search-fld").val(ui.item.label); // display the selected text
$("#search-fldID").val(ui.item.value); // save selected id to hidden input
return false;
},
change: function( event, ui ) {
var isInArray = false;
$local_source.forEach(function(element, index){
if ($("#search-fld").val().toUpperCase() == element.label.toUpperCase()) {
isInArray = true;
$("#search-fld").val(element.label); // display the selected text
$("#search-fldID").val(element.value); // save selected id to hidden input
console.log('inarray: '+isInArray+' label: '+element.label+' value: '+element.value);
};
});
if(!isInArray){
$("#search-fld").val(''); // display the selected text
$( "#search-fldID" ).val( ui.item? ui.item.value : 0 );
}
}
是的,使用。match,而不是。search。match调用的结果将返回匹配的实际字符串本身,但它仍然可以用作布尔值。
var string = "Stackoverflow is the BEST";
var result = string.match(/best/i);
// result == 'BEST';
if (result){
alert('Matched');
}
使用这样的正则表达式可能是JavaScript中最整洁、最明显的方法,但请记住,它是正则表达式,因此可能包含正则元字符。如果你想从其他地方获取字符串(例如,用户输入),或者如果你想避免转义大量元字符,那么你可能最好像这样使用indexOf:
matchString = 'best';
// If the match string is coming from user input you could do
// matchString = userInput.toLowerCase() here.
if (string.toLowerCase().indexOf(matchString) != -1){
alert('Matched');
}
假设我们想要在字符串变量大海捞针。这里有三个陷阱:
Internationalized applications should avoid string.toUpperCase and string.toLowerCase. Use a regular expression which ignores case instead. For example, var needleRegExp = new RegExp(needle, "i"); followed by needleRegExp.test(haystack).
In general, you might not know the value of needle. Be careful that needle does not contain any regular expression special characters. Escape these using needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");.
In other cases, if you want to precisely match needle and haystack, just ignoring case, make sure to add "^" at the start and "$" at the end of your regular expression constructor.
考虑到第(1)和(2)点,一个例子是:
var haystack = "A. BAIL. Of. Hay.";
var needle = "bail.";
var needleRegExp = new RegExp(needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "i");
var result = needleRegExp.test(haystack);
alert(result);