Улучшите этот рекурсивный поиск с помощью Regex
Я пытаюсь улучшить часть своего кода, используя Regex вместо обычной замены, чтобы получить чистую строку для отправки клиенту Solr.
String.prototype.replaceArray = function(find, replace) {
var replaceString = this;
for (var i = 0; i < find.length; i++) {
replaceString = replaceString.replace(find[i], replace[i]);
}
return replaceString;
};
var match = [
'\\',
'+',
'-',
'&',
'|',
'!',
'(',
')',
'{',
'}',
'[',
']',
'^',
'~',
'*',
'?',
':',
'"',
';',
' '
];
var replace = [
'\\\\',
'\\+',
'\\-',
'\\&',
'\\|',
'\\!',
'\\(',
'\\)',
'\\{',
'\\}',
'\\[',
'\\]',
'\\^',
'\\~',
'\\*',
'\\?',
'\\:',
'\\"',
'\\;',
'\\ '
];
_.map(object, function (field) {
field.replaceArray(match, replace);
});
Может ли существовать способ использовать Regex?
Я пытался заменить
field.replaceArray(match, replace);
к этому
field.replace(/([\\+-&|!(){}[]^~*?:";])/g, '\\$1');
но это не работает, вероятно, потому что я недостаточно понимаю, как работает Regex:(
1 ответ
Решение
Вы должны избежать квадратных скобок. Также поставьте дефис в конце, потому что на втором месте он указывает диапазон:
field.replace(/([\\+&|!(){}\[\]^~*?:"; -])/g, '\\$1');