Я хочу выполнить строковый поиск внутри строки. Просто говоря MySTR.search(Needle)
.
Проблема возникает, когда эта строка needle
содержит специальные регулярные выражения, такие как *, + и т.д. Ошибка с ошибкой invalid quantifier
.
Я просмотрел веб-сайт и узнал, что строка может быть экранирована с помощью \Q some string \E
.
Однако это не всегда приводит к желаемому поведению. Например:
var sNeedle = '*Stars!*';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
Результат равен -1. OK.
var sNeedle = '**Stars!**';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
Результат - "недопустимый квантификатор". Это происходит потому, что два или более специальных символа "касаются друг друга", потому что:
var sNeedle = '*Dont touch me*Stars!*Dont touch me*';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
Будет работать нормально.
Я знаю, что могу сделать функцию escapeAllBadChars(sInStr)
и просто добавлять двойные слэши перед каждым возможным специальным символом регулярного выражения, но мне интересно, есть ли более простой способ сделать это?