I'm mencoba untuk mendapatkan kasus-sensitif cari dengan dua string dalam JavaScript bekerja.
Biasanya hal itu akan menjadi seperti ini:
var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);
The /i
bendera akan untuk case-sensitive.
Tapi aku harus mencari kedua string; tanpa bendera itu bekerja sempurna:
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);
Jika saya tambahkan /i
bendera untuk contoh di atas akan mencari searchstring dan bukan untuk apa yang ada dalam variabel "searchstring" (berikutnya contoh tidak bekerja):
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);
Bagaimana saya bisa mencapai hal ini?
Ya, gunakan .pertandingan
, bukan .pencarian
. Hasil dari .pertandingan
sebut akan kembali sebenarnya string yang dicocokkan itu sendiri, tetapi masih dapat digunakan sebagai nilai boolean.
var string = "Stackoverflow is the BEST";
var result = string.match(/best/i);
// result == 'BEST';
if (result){
alert('Matched');
}
Menggunakan ekspresi reguler seperti yang mungkin adalah waktu dan yang paling jelas cara untuk melakukan itu di JavaScript, tapi ingat ini adalah ** ekspresi reguler, dan dengan demikian dapat berisi regex metakarakter. Jika anda ingin mengambil string dari tempat lain (misalnya, input pengguna), atau jika anda ingin menghindari harus melarikan diri banyak metakarakter, maka anda're mungkin terbaik menggunakan indexOf
seperti ini:
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');
}
Jika anda're hanya mencari string daripada yang lebih rumit ekspresi reguler, anda dapat menggunakan indexOf()
- tapi ingat untuk huruf kecil kedua string pertama karena indexOf()
adalah case sensitif:
var string="Stackoverflow is the BEST";
var searchstring="best";
// lowercase both strings
var lcString=string.toLowerCase();
var lcSearchString=searchstring.toLowerCase();
var result = lcString.indexOf(lcSearchString)>=0;
alert(result);
Atau dalam satu baris:
var result = string.toLowerCase().indexOf(searchstring.toLowerCase())>=0;
Misalkan kita ingin menemukan variabel string jarum
di variabel string jerami
. Ada tiga gotchas:
string.toUpperCase
dan string.toLowerCase
. Menggunakan ekspresi reguler yang mengabaikan hal sebaliknya. Misalnya, var needleRegExp = new RegExp(jarum, "aku");
diikuti oleh needleRegExp.tes(jerami)
.jarum
. Hati-hati bahwa jarum
tidak mengandung ekspresi reguler karakter khusus. Melarikan diri ini menggunakan jarum.mengganti(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
.jarum
dan jerami
, hanya mengabaikan hal ini, pastikan untuk menambahkan "^"
di awal dan "$"
pada akhir dari ekspresi reguler anda konstruktor.Mengambil poin (1) dan (2) menjadi pertimbangan, contohnya:
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);
ES6+:
let string="Stackoverflow is the BEST";
let searchstring="best";
let found = string.toLowerCase()
.includes(searchstring.toLowerCase());
termasuk()
mengembalikan true
jika searchString
muncul di satu atau lebih posisi atau false
sebaliknya.
Aku suka @CHR15TO's jawaban, tidak seperti jawaban saya've dilihat pada pertanyaan lain yang sejenis, jawaban itu benar-benar menunjukkan bagaimana untuk benar-benar melarikan diri pengguna disediakan pencarian string (daripada mengatakan itu akan diperlukan tanpa menunjukkan bagaimana).
Namun, hal's masih cukup kikuk, dan mungkin relatif lebih lambat. Jadi mengapa tidak memiliki solusi yang spesifik untuk apa yang mungkin persyaratan umum untuk coders? (Dan mengapa tidak termasuk dalam ES6 API BTW?)
Jawaban saya [https://stackoverflow.com/a/38290557/887092] pada pertanyaan yang sama memungkinkan hal berikut:
var haystack = 'A. BAIL. Of. Hay.';
var needle = 'bail.';
var index = haystack.naturalIndexOf(needle);
Ada dua cara untuk case sensitive perbandingan:
Mengkonversi string untuk huruf besar dan kemudian membandingkan mereka menggunakan ketat operator (===
). Bagaimana ketat operator memperlakukan operan membaca hal-hal di:
http://www.thesstech.com/javascript/relational-logical-operators
Pencocokan pola dengan menggunakan metode string:
Gunakan "pencarian" string metode untuk kasus sensitif cari. Baca tentang pencarian dan string lain metode di: http://www.thesstech.com/pattern-matching-using-string-methods
<!doctype html>
<script>// Cara 1
var a = "apple"; var b = "APPLE"; jika (a.toUpperCase() === b.toUpperCase()) { alert("sama"); }
//Cara 2
var a = " batal"; dokumen.write(a.pencarian(/null/i));
</script>Saya lakukan ini sering dan gunakan sederhana 5 baris prototipe yang menerima varargs. Itu adalah cepat dan karya di mana-mana.
myString.containsIgnoreCase('red','orange','yellow')
/**
* @param {...string} var_strings Strings to search for
* @return {boolean} true if ANY of the arguments is contained in the string
*/
String.prototype.containsIgnoreCase = function(var_strings) {
const thisLowerCase = this.toLowerCase()
for (let i = 0; i < arguments.length; i++) {
let needle = arguments[i]
if (thisLowerCase.indexOf(needle.toLowerCase()) >= 0) {
return true
}
}
return false
}
/**
* @param {...string} var_strings Strings to search for
* @return {boolean} true if ALL of the arguments are contained in the string
*/
String.prototype.containsAllIgnoreCase = function(var_strings) {
const thisLowerCase = this.toLowerCase()
for (let i = 0; i < arguments.length; i++) {
let needle = arguments[i]
if (thisLowerCase.indexOf(needle.toLowerCase()) === -1) {
return false
}
}
return true
}
// Unit test
let content = `
FIRST SECOND
"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat."
"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat."
"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat."
"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat."
"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat."
"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat."
FOO BAR
`
let data = [
'foo',
'Foo',
'foobar',
'barfoo',
'first',
'second'
]
let result
data.forEach(item => {
console.log('Searching for', item)
result = content.containsIgnoreCase(item)
console.log(result ? 'Found' : 'Not Found')
})
console.log('Searching for', 'x, y, foo')
result = content.containsIgnoreCase('x', 'y', 'foo');
console.log(result ? 'Found' : 'Not Found')
console.log('Searching for all', 'foo, bar, foobar')
result = content.containsAllIgnoreCase('foo', 'bar', 'foobar');
console.log(result ? 'Found' : 'Not Found')
console.log('Searching for all', 'foo, bar')
result = content.containsAllIgnoreCase('foo', 'bar');
console.log(result ? 'Found' : 'Not Found')
Saya menyadari bahwa jika pengguna memasukkan sebuah string dari teks tetapi daun input tanpa memilih salah satu dari autocomplete pilihan tidak ada nilai yang ditetapkan dalam hidden input, bahkan jika string bertepatan dengan satu dalam array. Jadi, dengan bantuan dari jawaban lain yang saya buat ini:
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 );
}
}