String.prototype.tolocalelowercase()

JavaScript toUpperCase

JavaScript’s toUpperCase() method converts all of a string’s characters to uppercase. There are no parameters, and this method also does just what you would think. This is an all caps converting method.


The toUpperCase() method does the opposite of the toLowerCase method. It converts all string characters with decimal Unicode value between 97 («a») and 122 («z») to their uppercase equivalent (by substracting 32 from their decimal Unicode value, from «A» at 65, to «Z» at 90).

The toLocaleUpperCase() method returns the calling string value converted to upper case, according to any locale-specific case mappings, just like it’s lower case counterpart.

The toLowerCase and toUpperCase methods can serve as your base to perform more specific case manipulations.

JavaScript

JS Array concat() constructor copyWithin() entries() every() fill() filter() find() findIndex() forEach() from() includes() indexOf() isArray() join() keys() length lastIndexOf() map() pop() prototype push() reduce() reduceRight() reverse() shift() slice() some() sort() splice() toString() unshift() valueOf()

JS Boolean constructor prototype toString() valueOf()

JS Classes constructor() extends static super

JS Date constructor getDate() getDay() getFullYear() getHours() getMilliseconds() getMinutes() getMonth() getSeconds() getTime() getTimezoneOffset() getUTCDate() getUTCDay() getUTCFullYear() getUTCHours() getUTCMilliseconds() getUTCMinutes() getUTCMonth() getUTCSeconds() now() parse() prototype setDate() setFullYear() setHours() setMilliseconds() setMinutes() setMonth() setSeconds() setTime() setUTCDate() setUTCFullYear() setUTCHours() setUTCMilliseconds() setUTCMinutes() setUTCMonth() setUTCSeconds() toDateString() toISOString() toJSON() toLocaleDateString() toLocaleTimeString() toLocaleString() toString() toTimeString() toUTCString() UTC() valueOf()

JS Error name message

JS Global decodeURI() decodeURIComponent() encodeURI() encodeURIComponent() escape() eval() Infinity isFinite() isNaN() NaN Number() parseFloat() parseInt() String() undefined unescape()

JS JSON parse() stringify()

JS Math abs() acos() acosh() asin() asinh() atan() atan2() atanh() cbrt() ceil() cos() cosh() E exp() floor() LN2 LN10 log() LOG2E LOG10E max() min() PI pow() random() round() sin() sqrt() SQRT1_2 SQRT2 tan() tanh() trunc()

JS Number constructor isFinite() isInteger() isNaN() isSafeInteger() MAX_VALUE MIN_VALUE NEGATIVE_INFINITY NaN POSITIVE_INFINITY prototype toExponential() toFixed() toLocaleString() toPrecision() toString() valueOf()

JS OperatorsJS RegExp constructor compile() exec() g global i ignoreCase lastIndex m multiline n+ n* n? n{X} n{X,Y} n{X,} n$ ^n ?=n ?!n source test() toString() (x|y) . \w \W \d \D \s \S \b \B \0 \n \f \r \t \v \xxx \xdd \uxxxx

JS Statements break class continue debugger do…while for for…in for…of function if…else return switch throw try…catch var while

JS String charAt() charCodeAt() concat() constructor endsWith() fromCharCode() includes() indexOf() lastIndexOf() length localeCompare() match() prototype repeat() replace() search() slice() split() startsWith() substr() substring() toLocaleLowerCase() toLocaleUpperCase() toLowerCase() toString() toUpperCase() trim() valueOf()

Опис

Всі малі літери перетворюються на великі відповідно до правил певної мови (місцевості), а все решта лишається без змін. Позаяк клас належить до незмінних типів даних, виклик створює новий рядок, лишаючи оригінал без змін. 

Зазвичай метод вертає той самий результат, що й . Втім для деяких мов, як-от турецька, правила перетворення регістра дещо відрізняються від того, що передбачено у Unicode, тож результат буде іншим.

Також зауважте, що перетворення не обов’язково є перетворенням символів 1:1, оскільки деякі символи можуть перетворитись на два (або навіть більше) символів при переведенні у верхній регістр. Таким чином, довжина отриманого рядка може відрізнятись від довжини вхідного рядка. Це також означає, що перетворення не є стабільним, а отже, наприклад, наступне може повернути :

Поиск подстроки

Существует несколько способов поиска подстроки.

Первый метод — str.indexOf(substr, pos).

Он ищет подстроку в строке , начиная с позиции , и возвращает позицию, на которой располагается совпадение, либо при отсутствии совпадений.

Например:

Необязательный второй аргумент позволяет начать поиск с определённой позиции.

Например, первое вхождение — на позиции . Для того, чтобы найти следующее, начнём поиск с позиции :

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

Тот же алгоритм можно записать и короче:

Также есть похожий метод str.lastIndexOf(substr, position), который ищет с конца строки к её началу.

Он используется тогда, когда нужно получить самое последнее вхождение: перед концом строки или начинающееся до (включительно) определённой позиции.

При проверке в условии есть небольшое неудобство. Такое условие не будет работать:

Мы ищем подстроку , и она здесь есть, прямо на позиции . Но не показывается, т. к. возвращает , и решает, что тест не пройден.

Поэтому надо делать проверку на :

Существует старый трюк с использованием — . Он преобразует число в 32-разрядное целое со знаком (signed 32-bit integer). Дробная часть, в случае, если она присутствует, отбрасывается. Затем все биты числа инвертируются.

На практике это означает простую вещь: для 32-разрядных целых чисел значение равно .

В частности:

Таким образом, равняется 0 только при (для любого , входящего в 32-разрядные целые числа со знаком).

Соответственно, прохождение проверки означает, что результат отличен от , совпадение есть.

Это иногда применяют, чтобы сделать проверку компактнее:

Обычно использовать возможности языка каким-либо неочевидным образом не рекомендуется, но этот трюк широко используется в старом коде, поэтому его важно понимать. Просто запомните: означает «если найдено»

Просто запомните: означает «если найдено».

Впрочем, если быть точнее, из-за того, что большие числа обрезаются до 32 битов оператором , существуют другие числа, для которых результат тоже будет , самое маленькое из которых — . Поэтому такая проверка будет правильно работать только для строк меньшей длины.

На данный момент такой трюк можно встретить только в старом коде, потому что в новом он просто не нужен: есть метод (см. ниже).

Более современный метод str.includes(substr, pos) возвращает , если в строке есть подстрока , либо , если нет.

Это — правильный выбор, если нам необходимо проверить, есть ли совпадение, но позиция не нужна:

Необязательный второй аргумент позволяет начать поиск с определённой позиции:

Методы str.startsWith и str.endsWith проверяют, соответственно, начинается ли и заканчивается ли строка определённой строкой:

Методы объекта

Долгое время в JavaScript термин «метод объекта» был просто альтернативным названием для свойства-функции.

Теперь это уже не так. Добавлены именно «методы объекта», которые, по сути, являются свойствами-функциями, привязанными к объекту.

Их особенности:

  1. Более короткий синтаксис объявления.
  2. Наличие в методах специального внутреннего свойства («домашний объект»), ссылающегося на объект, которому метод принадлежит. Мы посмотрим его использование чуть дальше.

Для объявления метода вместо записи нужно написать просто .

Например:

Как видно, для создания метода нужно писать меньше букв. Что же касается вызова – он ничем не отличается от обычной функции. На данном этапе можно считать, что «метод» – это просто сокращённый синтаксис для свойства-функции. Дополнительные возможности, которые даёт такое объявление, мы рассмотрим позже.

Также методами станут объявления геттеров и сеттеров :

Можно задать и метод с вычисляемым названием:


Итак, мы рассмотрели синтаксические улучшения. Если коротко, то не надо писать слово «function». Теперь перейдём к другим отличиям.

Сумісність з веб-переглядачами

The compatibility table in this page is generated from structured data. If you’d like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Update compatibility data on GitHub

Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet Node.js
constructor Chrome Full support 1 Edge Full support 12 Firefox Full support 1 IE Full support 3 Opera Full support 3 Safari Full support 1 WebView Android Full support 1 Chrome Android Full support 18 Firefox Android Full support 4 Opera Android Full support 10.1 Safari iOS Full support 1 Samsung Internet Android Full support 1.0 nodejs Full support 0.1.100

super

В ES-2015 появилось новое ключевое слово . Оно предназначено только для использования в методах объекта.

Вызов позволяет из метода объекта получить свойство его прототипа.

Например, в коде ниже наследует от .

Вызов из метода объекта обращается к :

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

При обращении через используется текущего метода, и от него берётся . Поэтому работает только внутри методов.

В частности, если переписать этот код, оформив как обычное свойство-функцию, то будет ошибка:

Ошибка возникнет, так как теперь обычная функция и не имеет . Поэтому в ней не работает .

Исключением из этого правила являются функции-стрелки. В них используется внешней функции. Например, здесь функция-стрелка в берёт внешний :

Ранее мы говорили о том, что у функций-стрелок нет своего , : они используют те, которые во внешней функции. Теперь к этому списку добавился ещё и .

Свойство – не изменяемое

При создании метода – он привязан к своему объекту навсегда. Технически можно даже скопировать его и запустить отдельно, и продолжит работать:

В примере выше метод запускается отдельно от объекта, но всё равно, благодаря , сохраняется доступ к его прототипу через .

Это – скорее технический момент, так как методы объекта, всё же, предназначены для вызова в контексте этого объекта. В частности, правила для в методах – те же, что и для обычных функций. В примере выше при вызове без объекта будет .

Bracket notation

This mode is more similar to accessing hashmaps and arrays in other programming languages. You can access any component (data (including other objects) or function) using this syntax.

This is exactly what your are doing in your example. You have , which is a string (and not a character literal, like it would be in a language such as C++).

Using the bracket notation, you access its method. But accessing it is still not enough; simply typing , for instance, in Javascript, doesn’t call the method. It’s just a simple statement. In order to call the function, you need to add the parenthesis: shows a simple dialog box containing , as it received no parameters. We can now use this knowledge to decipher your code, which becomes:

Which is much more readable.

Actually, a good way to understand this a little bit better is to execute the following Javascript:

This calls by passing it a function object, also , without also executing the second alert. What is shown (in Chrome 26, at least) is the following:

Calling:

shows two consecutive message boxes containing . This is easy to explain: the inner gets executed first, shows (because it didn’t have any parameters) and returns nothing. The outer alert receives the return value of inner alert — which is nothing, and also shows in a message box.

Parameter Values

Parameter Description
localesTry it Optional. Which language specific format to use.Click on the «Try it» button to see all values in action. Legal Values:Arabic (Saudi Arabia)Bangla (Bangladesh)Bangla (India)Czech (Czech Republic)Danish (Denmark)Austrian German»Swiss» GermanStandard German (as spoken in Germany)Modern GreekAustralian EnglishCanadian EnglishBritish EnglishIrish EnglishIndian EnglishNew Zealand EnglishUS EnglishEnglish (South Africa)Argentine SpanishChilean SpanishColombian SpanishCastilian Spanish (as spoken in Central-Northern Spain)Mexican SpanishAmerican SpanishFinnish (Finland)Belgian FrenchCanadian French»Swiss» FrenchStandard French (especially in France)Hebrew (Israel)Hindi (India)Hungarian (Hungary)Indonesian (Indonesia)»Swiss» ItalianStandard Italian (as spoken in Italy)Japanese (Japan)Korean (Republic of Korea)Belgian DutchStandard Dutch (as spoken in The Netherlands)Norwegian (Norway)Polish (Poland)Brazilian PortugueseEuropean Portuguese (as written and spoken in Portugal)Romanian (Romania)Russian (Russian Federation)Slovak (Slovakia)Swedish (Sweden)Indian TamilSri Lankan TamilThai (Thailand)Turkish (Turkey)Mainland China, simplified charactersHong Kong, traditional charactersTaiwan, traditional characters
options Optional. An object were you can set some properties. Legal properties:
Legal values: any currency code (like «EUR», «USD», «INR», etc.)
Legal values: (default)
Legal values: (default)
A number from 0 to 20 (default is 3)
A number from 1 to 21 (default is 21)
A number from 0 to 20 (default is 3)
A number from 1 to 21 (default is 1)
A number from 1 to 21 (default is 21)
Legal values: (default)
Legal values: (default)

JavaScript

JS Array concat() constructor copyWithin() entries() every() fill() filter() find() findIndex() forEach() from() includes() indexOf() isArray() join() keys() length lastIndexOf() map() pop() prototype push() reduce() reduceRight() reverse() shift() slice() some() sort() splice() toString() unshift() valueOf()

JS Boolean constructor prototype toString() valueOf()

JS Classes constructor() extends static super

JS Date constructor getDate() getDay() getFullYear() getHours() getMilliseconds() getMinutes() getMonth() getSeconds() getTime() getTimezoneOffset() getUTCDate() getUTCDay() getUTCFullYear() getUTCHours() getUTCMilliseconds() getUTCMinutes() getUTCMonth() getUTCSeconds() now() parse() prototype setDate() setFullYear() setHours() setMilliseconds() setMinutes() setMonth() setSeconds() setTime() setUTCDate() setUTCFullYear() setUTCHours() setUTCMilliseconds() setUTCMinutes() setUTCMonth() setUTCSeconds() toDateString() toISOString() toJSON() toLocaleDateString() toLocaleTimeString() toLocaleString() toString() toTimeString() toUTCString() UTC() valueOf()

JS Error name message

JS Global decodeURI() decodeURIComponent() encodeURI() encodeURIComponent() escape() eval() Infinity isFinite() isNaN() NaN Number() parseFloat() parseInt() String() undefined unescape()

JS JSON parse() stringify()

JS Math abs() acos() acosh() asin() asinh() atan() atan2() atanh() cbrt() ceil() cos() cosh() E exp() floor() LN2 LN10 log() LOG2E LOG10E max() min() PI pow() random() round() sin() sqrt() SQRT1_2 SQRT2 tan() tanh() trunc()

JS Number constructor isFinite() isInteger() isNaN() isSafeInteger() MAX_VALUE MIN_VALUE NEGATIVE_INFINITY NaN POSITIVE_INFINITY prototype toExponential() toFixed() toLocaleString() toPrecision() toString() valueOf()

JS OperatorsJS RegExp constructor compile() exec() g global i ignoreCase lastIndex m multiline n+ n* n? n{X} n{X,Y} n{X,} n$ ^n ?=n ?!n source test() toString() (x|y) . \w \W \d \D \s \S \b \B \0 \n \f \r \t \v \xxx \xdd \uxxxx

JS Statements break class continue debugger do…while for for…in for…of function if…else return switch throw try…catch var while

JS String charAt() charCodeAt() concat() constructor endsWith() fromCharCode() includes() indexOf() lastIndexOf() length localeCompare() match() prototype repeat() replace() search() slice() split() startsWith() substr() substring() toLocaleLowerCase() toLocaleUpperCase() toLowerCase() toString() toUpperCase() trim() valueOf()

Кавычки

В JavaScript есть разные типы кавычек.

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

Одинарные и двойные кавычки работают, по сути, одинаково, а если использовать обратные кавычки, то в такую строку мы сможем вставлять произвольные выражения, обернув их в :

Ещё одно преимущество обратных кавычек — они могут занимать более одной строки, вот так:

Выглядит вполне естественно, не правда ли? Что тут такого? Но если попытаться использовать точно так же одинарные или двойные кавычки, то будет ошибка:

Одинарные и двойные кавычки в языке с незапамятных времён: тогда потребность в многострочных строках не учитывалась. Что касается обратных кавычек, они появились существенно позже, и поэтому они гибче.

Обратные кавычки также позволяют задавать «шаблонную функцию» перед первой обратной кавычкой. Используемый синтаксис: . Автоматически вызываемая функция получает строку и встроенные в неё выражения и может их обработать. Подробнее об этом можно прочитать в . Если перед строкой есть выражение, то шаблонная строка называется «теговым шаблоном». Это позволяет использовать свою шаблонизацию для строк, но на практике теговые шаблоны применяются редко.

Совместимость с браузерами

Update compatibility data on GitHub

Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome для Android Firefox для Android Opera для Android Safari on iOS Samsung Internet Node.js
Chrome Полная поддержка 1 Edge Полная поддержка 12 Firefox Полная поддержка 1 IE Полная поддержка 4 Opera Полная поддержка 4 Safari Полная поддержка 1 WebView Android Полная поддержка 1 Chrome Android Полная поддержка 18 Firefox Android Полная поддержка 4 Opera Android Полная поддержка 10.1 Safari iOS Полная поддержка 1 Samsung Internet Android Полная поддержка 1.0 nodejs Полная поддержка 0.1.100

Методи екземплярів

Вертає символ (рівно одну кодову одиницю UTF-16), розташований за вказаним індексом .
Вертає число, яке є значенням кодової одиниці UTF-16, розташованої за вказаним індексом .
Вертає невід’ємне ціле число, яке є значенням коду символу UTF-16, що починається на вказаній позиції .
Об’єднує текст двох (або більше) рядків та повертає новий рядок.
Визначає, чи містить рядок, що викликав метод, рядок .
Визначає, чи завершується рядок символами рядка .
Вертає індекс всередині об’єкта , що викликав метод, першого знайденого значення , або , якщо воно не знайдене.
Вертає індекс всередині об’єкта , що викликав метод, останнього знайденого значення , або , якщо значення не знайдене.
Вертає число, що вказує, чи розташований рядок  перед, після, чи однаково, відносно наданого рядка у відсованій послідовності.
Використовується, щоб зіставити регулярний вираз  з рядком.
Вертає ітератор усіх збігів з регулярним виразом.
Вертає рядкове значення, на якому викликано метод, у формі нормалізації Юнікоду.
Доповнює поточний рядок наданим рядком з кінця та повертає новий рядок, що має довжину .
Доповнює поточний рядок наданим рядком з початку та повертає новий рядок, що має довжину .
Повертає рядок, що складається з елементів об’єкта, повторених  разів.
Використовується, щоб замінити заміною . може бути рядком або регулярним виразом, а  може бути рядком чи функцією.
Використовується, щоб замінити усі збіги з шаблоном заміною .  може бути рядком або регулярним виразом, а  може бути рядком або функцією.
Шукає збіг між регулярним виразом  та рядком, що викликав метод.
Вирізає частину рядка та повертає новий рядок.
Вертає масив рядків, заповнених розділенням початкового рядка підрядком .
Визначає, чи починається рядок з символів рядка .
Повертає вказану кільксть символів на початку рядка з вказаної позиції.
Повертає рядок, що містить символи рядка від вказаного індекса, або між вказаними індексами.

Символи рядка переводяться до нижнього регістра відповідно до поточних регіональних налаштувань.

Для більшості мов результат буде такий самий, як у .

Символи рядка переводяться до верхнього регістра відповідно до поточних регіональних налаштувань.

Для більшості мов результат буде такий самий, як у .

Повертає значення рядка, переведене до нижнього регістра.
Повертає рядкове представлення вказаного об’єкта. Заміщує метод .
Повертає значення рядка, переведене до верхнього регістра.
Прибирає пробіли з початку та кінця рядка. Частина стандарту ECMAScript 5.
Видаляє пробіли з початку рядка.
Видаляє пробіли з кінця рядка.
Повертає просту величину вказаного об’єкта. Заміщує метод .
Повертає новий об’єкт , який перебирає коди символів рядка, повертаючи кожний код символа рядкового значення.

JavaScript Title Case

Title case is a stylized form of capitalization used mainly for titles. This is where the first letter of most words are capitalized.

This means you may need to transform an object’s title field or any string value to title case if you plan on rendering it as a title, subtitle, headline or heading. Generally only ‘major’ words are capitalized, but there is debate as to what a major word is, and I will leave that to the grammar folks to fight about.

Let’s assume you want to title case every word in a string. There are several ways you can achieve this goal. Most involve normalization, splitting the string array and manipulating individual characters.

I am a fan of using regular expressions to make manipulating strings concise.


In this example, the titleCase method uses JavaScript to convert a string to title case by matching the first letter of each word and replacing it with its upper case equivalent.

The only problem with this method is the potential for mixed case words. But I am not sure this method should be responsible for that level of character conversion.

For example, if the sentence included McDonalds, lower casing all the characters prior to title casing would create a spelling error.

This is why managing string casing can be complex.

5.2 Поиск подстрок

Вторая по популярности операция после сравнения строк — это поиск одной строки в другой. Для этого у класса String тоже есть немного методов:

Методы Описание
Ищет строку в текущей строке. Возвращает индекс первого символа встретившийся строки.
Ищет строку в текущей строке, пропустив первых символов. Возвращает индекс найденного вхождения.
Ищет строку в текущей строке с конца. Возвращает индекс первого вхождения.
Ищет строку в текущей строке с конца, пропустив первых символов.
Проверяет, что текущая строка совпадает с шаблоном, заданным регулярным выражением.

Методы и часто используются в паре. Первый позволяет найти первое вхождение переданной подстроки в текущей строке. А второй метод позволяет найти второе, третье и т.д. вхождения за счет того, что пропускает первые index символов.

Допустим, у нас есть url типа такого: «https://domen.ru/about/reviews», и мы хотим заменить имя домена на javarush.ru. Домены в урлах могут быть разными, но мы знаем, что:

  • Перед именем домена идут два слеша «//»
  • После имени домена идет одинарный слеш

Вот как бы выглядел код такой программы:

Код Примечания
Создание объекта Scanner

Чтение строки с консоли

Получаем индекс первого вхождения строки «//»

Получаем индекс первого вхождения строки , но ищем только после символов «//».

Получаем строку от начала и заканчивая символами «//»

Получаем строку от и до конца.

Склеиваем строки и новый домен.

Методы и работают точно так же, только поиск ведется с конца строки к началу.

JavaScript toLowerCase

The toLowerCase() method converts all of a string’s characters to lowercase. There are no parameters, and this method does just what you would think.

The toLowerCase() method converts all string characters with decimal Unicode value between 65 («A») and 90 («Z») to their lowercase equivalent (by adding 32 to their decimal Unicode value, from «a» at 97, to «z» at 122). If you have ever worked with the ANSII character set then this should be familiar.

The toLocaleLowerCase() method returns the calling string value converted to lower case, according to any locale-specific case mappings. For the most part you should get the same value as toLowerCase.

The difference is some languages, like Turkish, do not follow the Unicode character codes exactly.

By default the method uses the host system’s default language. You can also pass a specific language to the string to get the local variation:

Описание

Этот метод не изменяет объект , на котором он вызывается. Он просто возвращает новую строку.

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

Передача строки в качестве второго параметра

строка замены может включать следующие специальные шаблоны замены:

Шаблон Замена
Вставляет символ доллара «$».
Вставляет сопоставившуюся подстроку.
Вставляет часть строки, предшествующую сопоставившейся подстроке.
Вставляет часть строки, следующую за сопоставившейся подстрокой.
или Символы или являются десятичными цифрами, вставляет n-ную сопоставившуются подгруппу из объекта в первом параметре.

Передача функции в качестве второго параметра

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

Результат вызова функции (её возвращаемое значение) будет использоваться в качестве строки замены (обратите внимание: описанные выше специальные шаблоны замены в этом случае не применяются). Обратите внимание, что функция будет вызвана несколько раз для каждого полного сопоставления, если регулярное выражение в первом параметре является глобальным

Функция принимает следующие аргументы:

Возможное имя Получаемое значение
Сопоставившаяся подстрока (cоответствует шаблону замены , описанному выше).
n-ная сопоставившаяся подгруппа из объекта в первом параметре метода (cоответствует шаблонам замены , и так далее, описанным выше). Например, если в качестве шаблона передано регулярное выражение , параметр будет значение сопоставления с подгруппой , а параметр  — с подгруппой .
Смещение сопоставившейся подстроки внутри всей рассматриваемой строки (например, если вся строка равна , а сопоставившаяся подстрока равна , то этот аргумент будет равен 1).
Вся рассматриваемая строка.

Точное число аргументов будет зависеть от того, был ли первым аргументом объект и, если был, сколько подгрупп в нём определено.

Следующий пример установит переменную в значение :

function replacer(match, p1, p2, p3, offset, string) {
  // p1 - не цифры, p2 - цифры, p3 - не буквы и не цифры
  return .join(' - ');
}
var newString = 'abc12345#$*%'.replace(/(*)(\d*)(*)/, replacer);

Normalize

The normalize() method returns a string as a Unicode Normalization Form. If the value isn’t a string, the method converts it to a string before normalizing.

The conversion to Unicode does not affect the string’s value, so the data is not corrupted.

Unicode characters are a way to ‘normalize’ the difference between language character sets.

There are four Unicode normalization forms:

  • NFC: Characters are decomposed and then recomposed by canonical equivalence.
  • NFD: Characters are decomposed by canonical equivalence, and multiple combining characters are arranged in a specific order.
  • NFKD: Characters are decomposed by compatibility, and multiple combining characters are arranged in a specific order.
  • NFKC: Characters are decomposed by compatibility, then recomposed by canonical equivalence.

The normalize method has a single, optional, parameter used to determine what form the characters are normalized to. If no value is supplied the default is NFC. If a value other than the four options is supplied a RangeError is thrown.

You can see how the normalize method works with this simple demonstration:

This feature was added in ECMAScript 6.

The normalize method is not supported by Internet Explorer or the old stock Android browser, which should be expected since neither of these browsers have been updated in recent years. I realize there may be cases you might want to use this in the browser, but I really feel like the normalize method would be used more in the nodejs space to, well, normalize data.

By normalizing the characters you are flattening potential character differences, which means you have more control over how you format your text. Capitalization is just one of the areas properly normalized Unicode are helpful.

It might be a good idea to normalize the characters to Unicode before using either toLowerCase or toUpperCase to ensure you have a standard character set.

5.3 Создание подстрок

Кроме сравнения строк и поиска подстрок, есть еще одно очень популярное действие — получение подстроки из строки. В предыдущем примере вы как раз видели вызов метода , который возвращал часть строки.

Вот список из 8 методов получения подстрок из текущей строки:

Методы Описание
Возвращает подстроку, заданную интервалом символов .
Повторяет текущую строку n раз
Возвращает новую строку: заменяет символ на символ
Заменяет в текущей строке подстроку, заданную регулярным выражением.
Заменяет в текущей строке все подстроки, совпадающие с регулярным выражением.
Преобразует строку к нижнему регистру
Преобразует строку к верхнему регистру
Удаляет все пробелы в начале и конце строки

Вот краткое описание существующих методов:

Метод


Метод возвращает новую строку, которая состоит из символов текущей строки, начиная с символа под номером и заканчивая . Как и во всех интервалах в Java, символ с номером в интервал не входит. Примеры:

Код Результат

Если параметр не указывается (а так можно), подстрока берется от символа beginIndex и до конца строки.

Метод

Метод repeat просто повторяет текущую строку раз. Пример:

Код Результат

Метод

Метод возвращает новую строку, в которой все символы заменены на символ . Длина строки при этом не меняется. Пример:

Код Результат

Методы и

Метод заменяет все вхождения одной подстроки на другую. Метод заменяет первое вхождение переданной подстроки на заданную подстроку. Строка, которую заменяют, задается регулярным выражением. Разбирать регулярные выражения мы будем в квесте Java Multithreading.

Примеры:

Код Результат

Методы

С этими методами мы познакомились, когда только в первый раз учились вызывать методы класса .

Метод

Метод удаляет у строки пробелы с начала и с конца строки. Пробелы внутри строки никто не трогает. Примеры:

Код Результат

Как всё устроено, Юникод

Глубокое погружение в тему

Этот раздел более подробно описывает, как устроены строки. Такие знания пригодятся, если вы намерены работать с эмодзи, редкими математическими символами, иероглифами, либо с ещё какими-то редкими символами.

Если вы не планируете их поддерживать, эту секцию можно пропустить.

Многие символы возможно записать одним 16-битным словом: это и буквы большинства европейских языков, и числа, и даже многие иероглифы.

Но 16 битов — это 65536 комбинаций, так что на все символы этого, разумеется, не хватит. Поэтому редкие символы записываются двумя 16-битными словами — это также называется «суррогатная пара».

Длина таких строк — :

Обратите внимание, суррогатные пары не существовали, когда был создан JavaScript, поэтому язык не обрабатывает их адекватно!

Ведь в каждой из этих строк только один символ, а показывает длину .

и — два редких метода, правильно работающие с суррогатными парами, но они и появились в языке недавно. До них были только String.fromCharCode и str.charCodeAt. Эти методы, вообще, делают то же самое, что , но не работают с суррогатными парами.

Получить символ, представленный суррогатной парой, может быть не так просто, потому что суррогатная пара интерпретируется как два символа:

Части суррогатной пары не имеют смысла сами по себе, так что вызовы в этом примере покажут лишь мусор.

Технически, суррогатные пары возможно обнаружить по их кодам: если код символа находится в диапазоне , то это — первая часть суррогатной пары. Следующий символ — вторая часть — имеет код в диапазоне . Эти два диапазона выделены исключительно для суррогатных пар по стандарту.

В данном случае:

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

Во многих языках есть символы, состоящие из некоторого основного символа со знаком сверху или снизу.

Например, буква — это основа для . Наиболее используемые составные символы имеют свой собственный код в таблице UTF-16. Но не все, в силу большого количества комбинаций.

Чтобы поддерживать любые комбинации, UTF-16 позволяет использовать несколько юникодных символов: основной и дальше один или несколько особых символов-знаков.

Например, если после добавить специальный символ «точка сверху» (код ), отобразится Ṡ.

Если надо добавить сверху (или снизу) ещё один знак — без проблем, просто добавляем соответствующий символ.

Например, если добавить символ «точка снизу» (код ), отобразится S с точками сверху и снизу: .

Добавляем два символа:

Это даёт большую гибкость, но из-за того, что порядок дополнительных символов может быть различным, мы получаем проблему сравнения символов: можно представить по-разному символы, которые ничем визуально не отличаются.

Например:

Для решения этой проблемы есть алгоритм «юникодной нормализации», приводящий каждую строку к единому «нормальному» виду.

Его реализует метод str.normalize().

Забавно, но в нашем случае «схлопывает» последовательность из трёх символов в один: — S с двумя точками.

Разумеется, так происходит не всегда. Просто Ṩ — это достаточно часто используемый символ, поэтому создатели UTF-16 включили его в основную таблицу и присвоили ему код.

Подробнее о правилах нормализации и составлении символов можно прочитать в дополнении к стандарту Юникод: Unicode Normalization Forms. Для большинства практических целей информации из этого раздела достаточно.


С этим читают