Избранное »

22.09.2014 – 07:27 | 2 комментария | 15 111 views

Здравствуйте все, кто работает в Индизайне!
Извещаем вас о том, что на youtube.com начал работу канал «InDesign Мастерская вёрстки». Там уже размещены более 60 видео с полным описанием как работать с программой DoTextOK. Другие интересные темы, касающиеся работы …

Читать полностью »
Работа в InDesign

Хитрости и секреты, приемы работы, уроки

Новая версия!

Особенности новой версии Индизайна

Плагины

Описание плагинов, информация о плагинах для работы с Adobe InDesign

Скрипты

Готовые к использованию скрипты для Adobe InDesign

Скриптинг

Описание языка, приёмов и методов программирования для Adobe InDesign

Home » Скриптинг

JavaScript — работа со строками

Добавлено на 02.11.2008 – 12:46Без комментариев | 1 397 views

Для работы со строками в JavaScript имеется встроенный статический объект String.
JavaScript различает строковые значения и строковые объекты. И те, и другие используют одинаковые методы, поэтому обычно для присвоения переменной строкового значения нет необходимости создавать объект (конструктором String()). Для этого требуется лишь обычная операция присвоения (var myStr = «Hello!»).

Создание строкового объекта:

var myString = new String("characters")

Доступ к свойствам и методам статического объекта String:

String.свойство | метод ([параметры]);

Доступ к свойствам и методам строкового значения:

строка.свойство | метод ([параметры]);

Различия между строковыми значениями и строковыми объектами проявляются там, где используется «объектность» строкового элемента. При работе со строковыми значениями каждое из них необходимо представлять в качестве объекта, имеющего свойства и методы, как и любой другой объект JavaScript.

Свойства

1. Свойство Length
Синтаксис: объект.length
Значением свойства length является количество символов в строке. Для пустой строки это значение равно нулю.

var myStr="Hello";
alert(length.myStr);
// Получим результат 5

Символами также считаются пробелы и знаки пунктуации. Все специальные символы, начинающиеся с обратной косой черты, считаются одиночными, включая символы новой строки и табуляции.
Свойство length часто используется, например, при обработке строк в циклах.

Методы

1. Метод CharAt() — возвращает строку, состоящую из символа, расположенного в данной позиции строкового объекта. Позиции символов строки нумеруются от нуля до объект.length-1. Если позиция лежит вне этого диапазона, то возвращается пустая строка.
Синтаксис: объект.charAt(позиция)
Аргументы: позиция — любое числовое выражение
Результат: строковое значение.
Для получения последнего символа нужно воспользоваться комбинацией строковых методов:

myString.charAt(myString.length-1);

Если скрипту требуется получить несколько символов, используется метод substring(). Попытка применения этого метода для извлечения одного символа является распространенной ошибкой, — метод string.charAt() работает гораздо эффективнее.

2. Метод charCodeAt() — возвращает число, равную коду Unicode символа, расположенного в данной позиции строки. Позиции символов строки нумеруются от нуля до объект.length-1. Если позиция лежит вне этого диапазона, или строка пустая, то возвращается NaN.

Преобразование символов в числовые эквиваленты представляет собой давнюю традицию в программировании. В течение долгого времени применялся стандарт ASCII, описывающий символы английского алфавита, буквенно-цифровые символы и символы пунктуации, — всего 128 значений (от 0 до 127). Расширенная версия этого стандарта включает 256 символов. Их точное значение зависит от операционной системы. Обычно это дополнительные символы других романских языков. Для того, чтобы обеспечить поддержку нероманских и пиктографических языков, был разработан стандарт Unicode, поддерживающий несколько тысяч различных символов.

Синтаксис: объект.charCodeAt(позиция)
Аргументы: позиция — любое числовое выражение
Результат: числовое значение

var myStr = "Собака";
var ukod = myStr.charCodeAt(0);
alert(ukod);

На экран выведется шестнадцатеричный код русской буквы «С»: 421. Если аргумент метода не указан, возвращается код первого символа строки.

"abc".charCodeAt() 
 // результат - 97

3. Метод concat() — возвращает новую строку, являющуюся конкатенацией исходной строки и аргументов метода. Этот метод эквивалентен операции
объект + строка0 + строка1 + … + строкаN
Синтаксис: объект.concat(строка0, строка1, …, строкаN)
Аргументы: строка0, строка1, …, строкаN — любые строковые выражения
Результат: строковое значение

var myStr = "Собака";
var newStr=myStr.concat(" на сене");

получим «Собака на сене».

4. Метод fromCharCode() —  создает новую строку (но не строковый объект), которая является конкатенацией символов Unicode с кодами код1, код2, …, кодN.
Синтаксис: String.fromCharCode(код1, код2, …, кодN)
Аргументы: код1, код2, …, кодN — числовые выражения
Результат: строковое значение
Это статический метод объекта String, поэтому для доступа к нему не нужно специально создавать строковый объект. Пример:

var s = String.fromCharCode(65, 66, 67);// s равно "ABC"

5. Метод indexOf() — возвращает первую позицию подстроки в строке. Позиции символов строки нумеруются от нуля до объект.length-1. Если задан необязательный аргумент начало, то поиск ведется, начиная с позиции начало; если нет, то с позиции 0, т. е. с первого символа строки. Если начало отрицательно, то оно принимается равным нулю; если начало больше, чем объект.length-1, то оно принимается равным объект.length-1. Если объект не содержит данной подстроки, то возвращается значение -1. Поиск ведется слева направо.
Синтаксис: объект.indexOf(подстрока [, начало])
Аргументы: подстрока — любое строковое выражение
начало — любое числовое выражение
Результат: числовое значение

var myStr = "Собака";
var pos=myStr.indexOf("оба");// результат равен 1. Подстрока "оба" входит в строку
//"Собака" начиная с 1-го символа (считаем от нуля!).

6. Метод lastIndexOf() — возвращает последнюю позицию подстроки в строке. Позиции символов строки нумеруются от нуля до объект.length-1. Если задан необязательный аргумент начало, то поиск ведется, начиная с позиции начало; если нет, то с позиции 0, т. е. с первого символа строки. Если начало отрицательно, то оно принимается равным нулю; если начало больше, чем объект.length-1, то оно принимается равным объект.length-1. Если объект не содержит данной подстроки, то возвращается значение -1. Поиск ведется справа налево.
Синтаксис: объект.lastIndexOf(подстрока [,начало])
Аргументы: подстрока — любое строковое выражение
начало — любое числовое выражение

7. Метод localeCompare() — сравнивает две строки с учетом национальных установок операционной системы.
Синтаксис: объект.localeCompare(строка1)
Аргументы: строка1 — любое строковое выражение
Результат: число
Метод localeCompare() позволяет сценарию сравнивать строки в кодировке Unicode, т.е., учитывая используемый язык общения с пользователями. Необходимость в этом методе возникает лишь в определенных языковых системах (например турецкой). Если строки являются равными, метод возвращает нулевое значение. Если строковое значение, для которого вызван метод (находящееся слева от точки) меньше (подсчитывается сумма кодов символов), чем строка-аргумент, метод возвращает отрицательное целое число; в ином случае — положительное.

8. Метод match сопоставляет регулярное выражение регвыр с примитивным значением строкового объекта. Результатом сопоставления является массив найденных подстрок или null, если соответствий нет. При этом:

Если регвыр не содержит опцию глобального поиска, то выполняется метод регвыр возвращается его результат. Результирующий массив содержит в элементе с индексом 0 найденную подстроку, а в остальных элементах — подстроки, соответствующие подвыражениям регвыр, заключенным в круглые скобки.

Если регвыр содержит опцию глобального поиска, то метод регвыр.exec(объект) выполняется до тех пор, пока находятся соответствия. Если n — количество найденных соответствий, то результатом является массив из n элементов, которые содержат найденные подстроки. Свойству регвыр.lastIndex присваивается номер позиции в исходной строке, указывающий на первый символ после последнего найденного соответствия, или 0, если соответствий не найдено.

Синтаксис: объект.match(регвыр)

Аргументы: регвыр — любое регулярное выражение

Результат: массив строк

9. Метод slice() — возвращает подстроку строкового объекта, от позиции начало до позиции конец, не включая ее.
Синтаксис: объект.slice(начало [,конец]?)
Аргументы: начало и конец — любые числовые выражения
Результат: новая строка
Если конец не задан, то возвращается подстрока, начиная с позиции начало и до конца исходной строки.
Позиции символов строки нумеруются от нуля до объект.length-1. Если значение начало отрицательно, то оно заменяется на объект.length+начало. Если значение конец отрицательно, то оно заменяется на объект.length+конец. Иными словами, отрицательные аргументы трактуются как смещения от конца строки.
Метод slice() похож на substring(): они оба позволяют извлечь из строки подстроку (не изменяя исходную). Преимущество slice() заключается в том, что в этом методе можно указать индекс, отсчитываемый не от начала, а от конца строки.

Для извлечения подстроки, которая заканчивается за 2 символа до конца строки, методом string.substring() требуется провести дополнительные вычисления:

string.substring(4, (string.length-2));

Метод slice() позволяет указать отрицательное значение во втором аргументе, т.е. отсчитывать индекс от конца строки:

string.slice(4, -2);

Метод string.slice() похож на string.substring(): они оба позволяют извлечь из строки подстроку (не изменяя исходную). Преимущество string.slice() заключается в том, что в этом методе можно указать индекс, отсчитываемый не от начала, а от конца строки.

Для извлечения подстроки, которая заканчивается за 2 символа до конца строки, методом string.substring() требуется провести дополнительные вычисления: string.substring(4, (string.length-2)).

10. Метод split() — разбивает строку на массив подстрок и возвращает его.
Синтаксис: объект.split(разделитель [,число]?)
Аргументы: разделитель — строковое или регулярное выражение
число — числовое выражение
Разбиение на подстроки производится следующим образом. Исходная строка просматривается слева направо в поисках разделителя. Как только он найден, подстрока от конца предыдущего разделителя (или от начала строки, если это первое вхождение разделителя) до начала найденного добавляется в массив подстрок. Таким образом, сам разделитель в текст подстроки не попадает.
Необязательный аргумент число задает максимально возможный размер результирующего массива. Если он задан, то после выделения числа подстрок метод завершает работу, даже если просмотр исходной строки не закончен.
Разделитель может быть задан либо строкой, либо регулярным выражением. Существует несколько случаев, требующих особого рассмотрения:
• Если разделитель не задан, то результирующий массив состоит из одного элемента, равного исходной строке.
• Если разделитель — пустая строка или регулярное выражение, соответствующее пустой строке, то результирующий массив состоит из объект.length элементов, каждый из которых содержит один символ исходной строки.
• Если разделитель — регулярное выражение, то очередная подстрока выделяется всякий раз, когда нашлось соответствие регулярному выражению, и соответствующая подстрока служит разделителем. Например, оператор var s = «a1b2c3d».split(/\d/); вернет массив [«a», «b», «c», «d»].

Еще пример:

var nameList="1.Fred,2.Jane,3.Steve"

Для преобразования этой строки в массив из трех элементов, содержащий лишь имена, без использования регулярных выражений, потребуется провести определенный синтаксический анализ еще до начала метода split(). Применение регулярных выражений значительно упрощает задачу.

var regexp = /,*\d.\b/;
var newArray = nameList.split(regexp);
// результат = массив "Fred", "Jane", "Steve"

Метод split() по своей функциональности противоположен методу array.join(), который объединяет элементы массива в одну строку, используя указанный разделитель (например, через точку-с-запятой).

11. Метод substr() — возвращает подстроку строкового объекта.
Синтаксис: объект.substr(позиция [,длина]?)
Аргументы: позиция и длина — числовые выражения
Результат: строковое значение
Метод substr возвращает подстроку примитивного значения строкового объекта, начинающуюся с данной позиции и содержащую длина символов. Если длина не задана, то возвращается подстрока, начиная с данной позиции и до конца исходной строки. Если длина отрицательна или равна нулю, то возвращается пустая строка.
Позиции символов строки нумеруются от нуля до объект.length-1. Если позиция больше или равна объект.length, то возвращается пустая строка. Если позиция отрицательна, то она трактуется как смещение от конца строки, т. е. заменяется на объект.length+позиция.

Результатом является строковое значение, а не строковый объект.

Примеры:

<span style="color: #000080;">var src = "abcdef";
var s1 = src.substr(1, 3);// "bcd"
var s2 = src.substr(1);// "bcdef"
</span>

Метод string.substr() представляет собой вариант метода string.substring(), который был частью языка JavaScript с момента его создания. Различие методов заключается в том, что аргументы метода string.substr() указывают начальный индекс и количество символов в подстроке, тогда как в string.substring() необходимо указывать начальный и конечный индексы.

12. Метод substring() — возвращает подстроку от позиции начало до позиции конец, не включая ее.
Синтаксис: объект.substring(начало [,конец])
Аргументы: начало и конец — числовые выражения
Результат: строковое значение
Метод substring возвращает подстроку примитивного значения строкового объекта, от позиции начало до позиции конец, не включая ее. Если конец не задан, то возвращается подстрока, начиная с позиции начало и до конца исходной строки.
Позиции символов строки нумеруются от нуля до объект.length-1. Отрицательные аргументы или равные NaN заменяются на нуль; если аргумент больше длины исходной строки, то он заменяется на нее. Если начало больше конца, то они меняются местами. Если начало равно концу, то возвращается пустая строка.
Результатом является строковое значение, а не строковый объект.

Примеры:

var src = "abcdef";
var s1 = src.substring(1, 3);// "bc"
var s2 = src.substring(1, -1);// "a"
var s3 = src.substring(-1, 1);// "a"

13. Метод toLocaleLowerCase() — возвращает новую строку, в которой все буквы исходной строки заменены на строчные с учетом национальных установок операционной системы. Остальные символы исходной строки не изменяются. Исходная строка остается прежней. Обычно этот метод возвращает тот же результат, что и toLowerCase; отличие возможно только в том случае, если кодировка языка противоречит правилам Unicode по преобразованию прописных букв в строчные.

Синтаксис: объект.toLocaleUpperCase()
Результат: новая строка

14. Метод toLocaleUpperCase() — возвращает новую строку, в которой все буквы исходной строки заменены на прописные с учетом национальных установок операционной системы. Остальные символы исходной строки не изменяются. Исходная строка остается прежней. Обычно этот метод возвращает тот же результат, что и toUpperCase; отличие возможно только в том случае, если кодировка языка противоречит правилам Unicode по преобразованию строчных букв в прописные.

15. Метод toLowerCase() — возвращает новую строку, в которой все буквы исходной строки заменены на строчные. Остальные символы исходной строки не изменяются. Исходная строка остается прежней. Например, оператор document.write(«объект String».toUpperCase()) выведет на экран обозревателя строку объект string.
Синтаксис: объект.toLowerCase()
Результат: новая строка

Пример:

myStr="InDesign CS3"
alert(myStr.toLowerCase()) // результат: indesign cs3

16. Метод toUpperCase() — возвращает новую строку, в которой все буквы исходной строки заменены на прописные. Остальные символы исходной строки не изменяются. Исходная строка остается прежней.
Синтаксис: объект.toUpperCase()
Результат: новая строка

myStr="InDesign CS3"
alert(myStr.toUpperCase()) // результат: INDESIGN CS3

Преобразование строк в числа и наоборот

Двумя наиболее распространенными задачами являются преобразование числа в строку и строки в число. Как уже говорилось, JavaScript является слабо типизированным языком, а это означает, что типы данных не имеют большого значения, но существуют некоторые случаи, когда надо быть уверенным, что имеется число или строка. Если надо сложить, например, 5 и число, которое вводит пользователь, то надо быть уверенным, что введено число, а не слово «Привет «.

var n = parseInt("3.14"); // 3
var n = parseFloat("3.14") // 3.14

Функция parseInt возвращает целое значение своего аргумента. Аргументы «3.14», «3», «3.00001» и «3.9999» превратятся в значение 3. Функция parseFloat, с другой стороны, возвращает также любое десятичное значение. Обе эти функции пытаются «очистить» данные перед возвращением числа. Например, parseInt(«3a») вернет значение 3.

Существует также несколько методов, которые можно использовать, когда надо преобразовать число в строку:

var n = 5;
var m = n.toString();
var m = n+'';
var m = new String(n);

Как говорилось ранее, последний метод может быть немного непривычным, поэтому предполагается, что пользователь будет держаться от него в стороне, если только не понадобится использовать объект String для специальных целей. Предпочтительным методом является n.toString(), но необходимо отметить, что часто используется второй метод. Например, если имеется уведомление alert(‘Имеется ‘ + apples + ‘ яблок’), то число apples автоматически преобразуется в строку.

Если необходимо выполнить строковую операцию с переменной, то необходимо быть уверенным, что имеется строка. Если, например, имеется запись года из 4 цифр и ее надо преобразовать в 2 цифры:

var year = 2000;
var sYear = year.toString();
var year2 = year.substr(year.length-2);

Можно было бы также легко вычесть 2000 из этой даты, но что, если датой является 1995? или 1800? или 2700 или просто 5? В результате могли бы получиться совершенно неправильные даты, если вычесть 2000 из каждой такой даты. Используемый метод всегда даст правильные две цифры года.

Некоторые функции обработки строк (листинг)

// Извлечение части строки перед подстрокой searchString
function getFront(mainStr, searchStr)
{
foundOffset = mainStr.indexOf(searchStr);
if (foundOffset == -1) {
return null;
}
return mainStr.substring(0,foundOffset);
}
 
// Извлечение части строки после подстроки searchstring
function getEnd(mainStr,searchStr)
{
foundOffset = mainStr.indexOf(searchStr);
if (foundOffset == -1) {
return null;
}
return mainStr.substring(foundOffset+searchStr.length, mainStr.length);
}
// Вставка подстроки insertstring перед подстрокой searchstring
function insertstring(mainStr,searchStr,insertStr)
{
var front = getFront (mainStr, searchStr);
var end = getEnd(mainStr,searchStr);
if (front != null &amp;&amp; end ! = null) {
return front + insertStr + searchStr + end;
}
return null;
}
 
// Удаление подстроки deleteString
function deleteString(mainStr, deleteStr)
{
return replaceString(mainStr,deleteStr, "");
}
 
// Замена searchstring на replaceString
function replaceString(mainStr,searchStr,replaceStr)
{
var front = getFront(mainStr,searchStr);
var end = getEnd(mainStr,searchStr);
if (front != null &amp;&amp; end != null) {
return front + replaceStr + end;
}
return null;
}

Две первых функции извлекают подстроку в начале или конце строки и являются промежуточными функциями набора, ядро которого составляют три последних функции. Обратите внимание, что одни функции зависят от других, поэтому только включение всей группы из пяти функций позволяет им работать так, как запланировано.

Оставить комментарий!

Вы должны быть в системе чтобы оставить комментарий.