Манипуляции строковыми значениями
Оглавление
Манипуляции строковыми значениями
Страница 2
Страница 3
Страница 4
Страница 5
Страница 3 из 5
Подсчет всех вхождений подстроки в строку
Проблема
Очень часто бывает нужно подсчитать, сколько раз в заданную строку входит
какая-либо подстрока. Как это сделать?
Решение 1
Использование функции jspsAllMatches (листинг 1.7), формат вызова которой
выглядит так:
jspsAllMatches(<Строка>, <Искомая подстрока>);
Собственно, объяснений здесь особых не требуется. Первым параметром
передается Строка, в которой выполняется поиск всех вхождений подстроки. Вторым
же параметром передается сама искомая подстрока. Возвращает
функция число вхождений Искомой подстроки В Строку.
Листинг 1.7. Функция jspsAllMatches, возвращающая число вхождений подстроки в
строке
function jspsAllMatches(workString, searchSubstring) {
var nSS = 0;
var nWSLen = workString.length; var nSSLen = searchSubstring.length; var nP =
workString.indexOf(searchSubstring); while (nP != -1) {
nSS++;
nP += nSSLen;
nP = workString.indexOf(searchSubstring, nP) ; } return nSS; }
Пример
var s = "JavaScript";
var n = jspsAllMatches(s, "a");
Приведенный в листинге 1.7 сценарий поместит в переменную п число 2 — это
количество букв "а" в слове "JavaScript".
Решение 2
Использование метода allMatches объекта string (листинг 1.8), формат вызова
которого:
<Строка>. allMatches {<Искомая подстрока>) ;
Листинг 1.8 Meтод allMatches объекта String, возвращающий число вхождений
подстроки в строке
function mjspsAllMatches(searchSubstring)
{
var workString = new String(this); var nSS = 0;
var nWSLen = workString.length; var nSSLen = searchSubstring.length; var nP =
workString.indexOf(searchSubstring); while (nP != -1) {
nSS++;
nP += nSSLen;
nP = workString.indexOf(searchSubstring, nP); } return nSS; }
String.prototype.ailMatches = mjspsAllMatches;
Пример
var s = "JavaScript";
var n = s.allMatches("a");
Замены подстроки другой подстрокой
Проблема
Очень часто приходится выполнять замену подстроки в строке другой подстрокой.
Язык JavaScript не содержит для этого никаких встроенных средств, что сильно
осложняет задачу программистов.
Решение 1
Использование функции jspsstringReplace (листинг 1.9), формат вызова которой
выглядит так:
jspsstringReplace{<Строка>, <Искомая подстрока>, <Заменяющая
подстрока> [, <Номер вхождения искомой подстроки>]);
Эта функция принимает четыре параметра. Первым параметром передается
собственно Строка, которую нужно обработать с помощью этой функции. Второй и
третий параметры в объяснении не нуждаются. Что касается четвертого,
необязательного, параметра, то он задает номер вхождения искомой подстроки в
Строку, которое нужно заменить (подстроки нумеруются, начиная с единицы). Если
этот параметр не задан, выполняется замена первой найденной Искомой
подстроки.
Функция возвращает обработанную строку, в которой найденное вхождение
Искомой подстроки заменено. Если искомая подстрока в Строке не встретилась,
возвращается неизмененная Строка.
Листинг 1.9. Функция jspsStringReplace заменяющая заданную подстроку другой
подстрокой
function jspsStringReplace(workString, searchSubstring, replaceSubstring,
substringNumber) {
var s1, s2, nSS = 1;
if (!substringNumber) substringNumber = 1; var nWSLen = workstring.length;
var nSSLen = searchSubstring.length; var nP =
workstring.indexOf(searchSubstring); while (nP !=-1) {
if (nSS == substringNumber) {
s1 = workstring.substring(0, nP); s2 = workstring.substring(nP + nSSLen,
nWSLen); workstring = s1 + replaceSubstring + s2; break;
nP = workstring.indexOf(searchSubstring, nP + 1); nSS++;
} return workstring;
}
Примеры
var s1 = "Здравствуйте, <имя посетителям>!";
var s2 = jspsStringReplace(s1, "<имя посетителя>", "Вася Пупкин");
document.write(s2);
« Пред. - След. »