У меня есть условие string.match, которое работало, пока я не понял, что некоторые слова являются "персональными (компьютерными)", имеют специальные символы, такие как круглые скобки в слове. Например, мой код захватывает термин для сравнения с "персональным (компьютером)" и ищет данные, чтобы найти любой экземпляр этого, но используя
string1.match(stringtarget,"ig"); //returns null
Я начинаю с регулярным выражением, так как я могу исправить это, чтобы работать и для специальных символов.
Если вам не нужны функции регулярного выражения, вы можете использовать indexOf
:
if (string1.toLowerCase().indexOf(stringtarget.toLowerCase()) >= 0) {
// It in there
}
В противном случае (и я предполагаю, что вы используете match
по какой-то причине!), вам нужно предварительно обработать stringtarget
, чтобы избежать каких-либо специальных символов.
Например, это функция, которую я использовал в недавнем проекте, чтобы сделать именно это, что вдохновлено аналогичной функцией PHP:
if (!RegExp.escape) {
(function() {
// This is drawn from http://phpjs.org/functions/preg_quote:491
RegExp.escape = RegExp_escape;
function RegExp_escape(str) {
return String(str).replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!<>\|\:])/g, '\\$1');
}
})();
}
И так:
var match = string1.match(RegExp.escape(stringtarget),"ig");
Вы можете использовать preg_quote
порт javascript, чтобы избежать символов, специфичных для регулярного выражения.