Лучшее решение, чтобы заменить любой Символ, мы используем эти indexOf(), includes(), substring()
функции, чтобы заменить matched String
на provided String
в Current String.
String.indexOf()
предназначена для поиска позиции индекса n
th .
String.includes()
метод определяет, может ли одна строка быть найдена в другой строке, возвращая true или false в зависимости от ситуации.
String.substring()
предназначена для получения частей строки (preceding
, exceding
). Добавлена замещающая строка между этими частями для генерации окончательной возвращаемой строки.
Следующая функция позволяет использовать любого персонажа.
где as RegExp
не позволит использовать какой-либо специальный символ, например **
, а некоторые символы необходимо экранировать, например $
.
String.prototype.replaceAllMatches = function(obj) { // Obj format: { 'matchkey' : 'replaceStr' }
var retStr = this;
for (var x in obj) {
//var matchArray = retStr.match(new RegExp(x, 'ig'));
//for (var i = 0; i < matchArray.length; i++) {
var prevIndex = retStr.indexOf(x); // matchkey = '*', replaceStr = '$*' While loop never ends.
while (retStr.includes(x)) {
retStr = retStr.replaceMatch(x, obj[x], 0);
var replaceIndex = retStr.indexOf(x);
if( replaceIndex < prevIndex + (obj[x]).length) {
break;
} else {
prevIndex = replaceIndex;
}
}
}
return retStr;
};
String.prototype.replaceMatch = function(matchkey, replaceStr, matchIndex) {
var retStr = this, repeatedIndex = 0;
//var matchArray = retStr.match(new RegExp(matchkey, 'ig'));
//for (var x = 0; x < matchArray.length; x++) {
for (var x = 0; (matchkey != null) && (retStr.indexOf(matchkey) > -1); x++) {
if (repeatedIndex == 0 && x == 0) {
repeatedIndex = retStr.indexOf(matchkey);
} else { // matchIndex > 0
repeatedIndex = retStr.indexOf(matchkey, repeatedIndex + 1);
}
if (x == matchIndex) {
retStr = retStr.substring(0, repeatedIndex) + replaceStr + retStr.substring(repeatedIndex + (matchkey.length));
matchkey = null; // To break the loop.
}
}
return retStr;
};
Мы также можем использовать объект регулярного выражения для сопоставления текста с шаблоном. Ниже приведены функции, которые будут объектом регулярного выражения.
Вы получите SyntaxError, когда используете неправильный шаблон регулярных выражений, например '**'
.
String.replace()
используется для замены указанной строки указанной строкой.
String.match()
Функция определяет, сколько раз строка повторяется.
RegExp.prototype.test
метод выполняет поиск соответствия между регулярным выражением и указанной строкой. Возвращает true или false.
String.prototype.replaceAllRegexMatches = function(obj) { // Obj format: { 'matchkey' : 'replaceStr' }
var retStr = this;
for (var x in obj) {
retStr = retStr.replace(new RegExp(x, 'ig'), obj[x]);
}
return retStr;
};
Обратите внимание, что регулярные выражения пишутся без кавычек.
Примеры использования вышеуказанных функций:
var str = "yash yas $dfdas.**";
console.log('String : ', str);
// No need to escape any special Character
console.log('Index Matched replace : ', str.replaceMatch('as', '*', 2) );
console.log('Index Matched replace : ', str.replaceMatch('y', '~', 1) );
console.log('All Matched replace : ', str.replaceAllMatches({'as' : '**', 'y':'Y', '$':'-'}));
console.log('All Matched replace : ', str.replaceAllMatches({'**' : '~~', '$':'&$&', '&':'%', '~':'>'}));
// You need to escape some special Characters
console.log('REGEX All Matched replace : ', str.replaceAllRegexMatches({'as' : '**', 'y':'Y', '\\$':'-'}));
Результат:
String : yash yas $dfdas.**
Index Matched replace : yash yas $dfd*.**
Index Matched replace : yash ~as $dfdas.**
All Matched replace : Y**h Y** -dfd**.**
All Matched replace : yash yas %$%dfdas.>>
REGEX All Matched replace : Y**h Y** -dfd**.**