Прежде всего, граница слова, которую вы добавляете, если первый символ представляет собой слово char, вероятно, должна быть согласована с несимвольными символами: если вы добавляете \b
перед символьными символами, добавьте \B
перед несловесными.Символы, чтобы получить то же поведение.
const prefix = wordCharacterRegex.test(word[0]) ? "\\b" : "\\B";
Тогда неясно, как выглядит ваш метод escapeRegexCharacters
, но именно там вы можете вставить \s*
между каждым символом ключевого слова:
function escapeRegexCharacters(s) {
var res = s.replace(/([-\/\\^$*+?.()|[\]{}])|[\s\S]/g, (m,g) => (g ? "\\" + g : m) + "\\s*");
return res.substring(0, res.length -3);
}
Вот демоверсия:
let word = "ec2v6db"; // lond is checked
let text = "EC2V 6DB, London, United Kingdom";
const wordCharacterRegex = /\w/;
function escapeRegexCharacters(s) {
var res = s.replace(/([-\/\\^$*+?.()|[\]{}])|[\s\S]/g, (m,g) => (g ? "\\" + g : m) + "\\s*");
return res.substring(0, res.length -3);
}
const prefix = wordCharacterRegex.test(word[0]) ? "\\b" : "\\B";
const regex = new RegExp(prefix + escapeRegexCharacters(word), "i");
// Replacing text with spaces
console.log(text.replace(regex, m => " ".repeat(m.length)));
// => " , London, United Kingdom"
// Adding tags around the match
console.log(text.replace(regex, "<highlight>$&</highlight>"));
// Getting the indices:
let match = regex.exec(text);
if (match) {
console.log([match.index, match.index+match[0].length]);
}