From 980fe00a74a9ad013b945755415ace2e5429c3c2 Mon Sep 17 00:00:00 2001
From: Alexey Pyltsyn Блок обычно используется с управляющими инструкциями (например, В вышеприведённом примере Обратите внимание: в JavaScript отсутствует область видимости блока до ECMAScript2015. Переменные, объявленные внутри блока, имеют область видимости функции (или скрипта), в которой находится данный блок, вследствие чего они сохранят свои значения при выходе за пределы блока. Другими словами, блок не создаёт новую область видимости. "Автономные" (standalone) блоки в JavaScript могут продуцировать полностью отличающийся результат, от результата в языках C или Java. Например:if
, for
, while
).
+while (x < 10) { x++; }
while (x < 10) { x++; }
{ x++; }
является блоком.var x = 1;
+
var x = 1;
{
var x = 2;
}
@@ -48,7 +48,7 @@ console.Используйте оператор
if
для выполнения инструкции, если логическое условия истинно. Используйте опциональный else
, для выполнения инструкции, если условие ложно. Оператор if выглядит так:
if (condition) { +if (condition) { statement_1; } else { statement_2; @@ -58,7 +58,7 @@ console.Также вы можете объединить несколько инструкций, пользуясьelse if
для получения последовательности проверок условий: -if (condition_1) { statement_1;} else if (condition_2) { statement_2;} else if (condition_n) { statement_n; } else { statement_last;}+if (condition_1) { statement_1;} else if (condition_2) { statement_2;} else if (condition_n) { statement_n; } else { statement_last;}В случае нескольких условий только первое логическое условие, которое вычислится истинным (true), будет выполнено. Используйте блок (
@@ -72,12 +72,12 @@ console.Нежелательно использовать простые присваивания в условном выражении, т.к. присваивание может быть спутано с равенством при быстром просмотре кода. Например, не используйте следующий код: -{ ... }
) для группировки нескольких инструкций. Применение блоков является хорошей практикой, особенно когда используются вложенные инструкцииif
:if (x = y) { /* ... */ } +
if (x = y) { /* ... */ }
Если вам нужно использовать присваивание в условном выражении, то распространённой практикой является заключение операции присваивания в дополнительные скобки. Например:
-+if ( (x = y) ) { /* ... */ }
if ( (x = y) ) { /* ... */ }
Ложные значения
@@ -96,14 +96,14 @@ console.Не путайте примитивные логические значенияtrue
иfalse
со значениями true и false объекта {{jsxref("Boolean")}}. Например: -var b = new Boolean(false); +var b = new Boolean(false); if (b) // это условие true if (b == true) // это условие falseВ следующем примере функция
-checkData
возвращаетtrue
, если число символов в объектеText
равно трём; в противном случае функция отображает окно alert и возвращаетfalse
.function checkData() { +
function checkData() { if (document.form1.threeChar.value.length == 3) { return true; } else { @@ -117,7 +117,7 @@ if (b == true) // это условие false
Инструкция
-switch
позволяет сравнить значение выражения с различными вариантами и при совпадении выполнить соответствующий код. Инструкция имеет следующий вид:switch (expression) { +switch (expression) { case label_1: statements_1 [break;] @@ -137,7 +137,7 @@ if (b == true) // это условие falseВ следующем примере если
-fruittype
имеет значение"Bananas"
, то будет выведено сообщение"Bananas are $0.48 a pound."
и операторbreak
прекратит выполнениеswitch
. Если бы операторbreak
отсутствовал, то был бы также выполнен код, соответствующий ветви"Cherries"
, т.е. выведено сообщение"Cherries are $3.00 a pound."
.switch (fruittype) { +
switch (fruittype) { case "Oranges": console.log("Oranges are $0.59 a pound."); break; @@ -182,7 +182,7 @@ console.Вы можете выбросить любое выражение, а не только выражения определённого типа. В следующем примере выбрасываются исключения различных типов: -
throw "Error2"; // string +
@@ -191,7 +191,7 @@ console.В следующем примере объектthrow "Error2"; // string throw 42; // number throw true; // boolean throw { toString: function() { return "I'm an object!"; } };
// object
UserException
выбрасывается как исключение: -function UserException (message) { +
function UserException (message) { this.message = message; this.name = "UserException"; } @@ -208,7 +208,7 @@ console.В следующем примере вызывается функция
getMonthName
, которая возвращает название месяца по его номеру. Если месяца с указанным номером не существует, то функция выбросит исключение"InvalidMonthNo"
, которое будет перехвачено в блокеcatch
: -function getMonthName(mo) { +function getMonthName(mo) { mo = mo - 1; // Adjust month number for array index (1 = Jan, 12 = Dec) var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul", "Aug","Sep","Oct","Nov","Dec"]; @@ -239,7 +239,7 @@ catch (e) {В следующем примере выбрасывается исключение, которое перехватывается в блоке
-catch
:try { +
try { throw "myException" } catch (e) {
console.error(e);
@@ -251,7 +251,7 @@ catch (e) {
В следующем примере открывается файл, затем в блоке
-try
происходит вызов функцииwriteMyFile
, который может выбросить исключение. Если возникает исключение, то оно обрабатывается в блокеcatch
. В любом случае файл будет закрыт функциейcloseMyFile
, вызов которой находится в блокеfinally
.openMyFile(); +
openMyFile(); try { writeMyFile(theData); } catch(e) { @@ -262,7 +262,7 @@ catch (e) {
Если блок
-finally
возвращает значение, то данное значение становится возвращаемым значением всей связкиtry-catch-finally
. Значения, возвращаемые блокамиtry
иcatch
, будут проигнорированы.function f() { +
function f() { try { console.log(0); throw "bogus"; @@ -282,7 +282,7 @@ catch (e) {
Замена возвращаемых значений блоком
-finally
распространяется в том числе и на исключения, которые выбрасываются или перевыбрасываются в блокеcatch
:function f() { +
function f() { try { throw "bogus"; } catch(e) { @@ -314,7 +314,7 @@ catch (e) {
Если вы выбрасываете собственные исключения, то чтобы получить преимущество, которое предоставляют эти свойства (например, если ваш блок
-catch
не делает различий между вашими исключениями и системными), используйте конструкторError
. Например:function doSomethingErrorProne () { +
function doSomethingErrorProne () { if ( ourCodeMakesAMistake() ) { throw ( new Error('The message') ); } else { @@ -348,7 +348,7 @@ catch (e) {
Простой пример использования объектов
-Promise
иXMLHttpRequest
для загрузки изображения доступен в репозитории MDN promise-test на GitHub. Вы также можете посмотреть его в действии. Каждый шаг прокомментирован, что позволяет вам разобраться в архитектуреPromise
и XHR. Здесь приводится версия без комментариев:function imgLoad(url) { +
function imgLoad(url) { return new Promise(function(resolve, reject) { var request = new XMLHttpRequest(); request.open('GET', url); diff --git a/files/ru/web/javascript/guide/modules/index.html b/files/ru/web/javascript/guide/modules/index.html index 8bf2b4af9c..8416503814 100644 --- a/files/ru/web/javascript/guide/modules/index.html +++ b/files/ru/web/javascript/guide/modules/index.html @@ -43,7 +43,7 @@ translation_of: Web/JavaScript/Guide/Modules
В первом примере (см. директорию basic-modules) у нас следующая структура файлов:
-index.html +index.html main.js modules/ canvas.js @@ -106,7 +106,7 @@ modules/Самый простой способ использовать экспорт — поместить конструкцию
-export
перед любыми элементами, которые вы хотите экспортировать из модуля, например:export const name = 'square'; +export const name = 'square'; export function draw(ctx, length, x, y, color) { ctx.fillStyle = color; @@ -125,13 +125,13 @@ export function draw(ctx, length, x, y, color) {Более удобный способ экспорта всех элементов, которые вы хотите экспортировать,— использовать одну конструкцию
-export
в конце файла модуля, где указать переменные, функции, классы, который вы хотите экспортировать, через запятую в фигурных скобках. Например:export { name, draw, reportArea, reportPerimeter };+export { name, draw, reportArea, reportPerimeter };Импорт функционала в ваш скрипт
После того, как вы экспортировали некоторые функции из своего модуля, вам необходимо импортировать их в свой скрипт, чтобы иметь возможность использовать их. Самый простой способ сделать это:
-import { name, draw, reportArea, reportPerimeter } from './modules/square.js';+import { name, draw, reportArea, reportPerimeter } from './modules/square.js';Используйте конструкцию {{JSxRef("Statements/import", "import")}}, за которой следует разделенный запятыми список функций, которые вы хотите импортировать, заключённый в фигурные скобки, за которым следует ключевое слово from, за которым следует путь к файлу модуля — путь относительно корня сайта, который для нашего примера
@@ -140,11 +140,11 @@ export function draw(ctx, length, x, y, color) {basic-modules
будет равен/js-examples/modules/basic-modules
.Так например:
-/js-examples/modules/basic-modules/modules/square.js+/js-examples/modules/basic-modules/modules/square.jsстановится
-./modules/square.js+./modules/square.jsВы можете найти подобные строки кода в файле
@@ -155,7 +155,7 @@ export function draw(ctx, length, x, y, color) {main.js
.После того, как вы импортировали функции в свой скрипт, вы можете использовать их так же, как если бы они были определены в этом же файле. Следующий пример можно найти в
-main.js
, сразу за строками импорта:let myCanvas = create('myCanvas', document.body, 480, 320); +let myCanvas = create('myCanvas', document.body, 480, 320); let reportList = createReportList(myCanvas.id); let square1 = draw(myCanvas.ctx, 50, 50, 100, 'blue'); @@ -177,11 +177,11 @@ reportPerimeter(square1.length, reportList);Прежде всего, вам нужно добавить
-type="module"
в<script>
-элемент, чтобы объявить, что скрипт является модулем. Чтобы подключить модульmain.js
, нужно написать следующее:<script type="module" src="main.js"></script>+<script type="module" src="main.js"></script>Вы также можете встроить скрипт модуля непосредственно в HTML-файл, поместив JavaScript-код внутрь
-<script>
-элемента:<script type="module"> +<script type="module"> /* код JavaScript модуля */ </script>@@ -213,25 +213,25 @@ reportPerimeter(square1.length, reportList);Давайте посмотрим на пример, и мы объясним, как это работает. В модуле
-square.js
из нашего примера вы можете найти функциюrandomSquare()
, которая создаёт квардрат случайного цвета и размера со случайными координатами. Мы хотим экпортировать эту функции по умолчанию, поэтому в конце файла пишем следующее:export default randomSquare;+export default randomSquare;Обратите внимание на отсутствие фигурных скобок.
Кстати, можно было бы определить функцию как анонимную и добавить к ней
-export default
:export default function(ctx) { +export default function(ctx) { ... }В нашем файле
-main.js
мы импортируем функцию по умолчанию, используя эту строку:import randomSquare from './modules/square.js';+import randomSquare from './modules/square.js';Снова обратите внимание на отсутствие фигурных скобок. Такой синтакис допустим, поскольку для каждого модуля разрешен только один экспорт по умолчанию, и мы знаем, что это
-randomSquare
. Вышеупомянутая строка является сокращением для:import {default as randomSquare} from './modules/square.js';+import {default as randomSquare} from './modules/square.js';Примечание: «as» синтаксис для переименования экспортируемых элементов поясняется ниже в разделе Переименование импорта и экмпорта.
@@ -252,7 +252,7 @@ reportPerimeter(square1.length, reportList);Так, например, оба следующих элемента будут выполнять одну и ту же работу, хотя и немного по-разному:
-// внутри module.js +// внутри module.js export { function1 as newFunctionName, function2 as anotherNewFunctionName @@ -261,7 +261,7 @@ export { // внутри main.js import { newFunctionName, anotherNewFunctionName } from './modules/module.js';-// внутри module.js +// внутри module.js export { function1, function2 }; // внутри main.js @@ -274,11 +274,11 @@ import { function1 as newFunctionName,Внутри каждого из этих модулей у нас есть функции с одинаковыми именами, которые экспортируются, и поэтому у каждого из них есть один и тот же оператор
-export
внизу файла:export { name, draw, reportArea, reportPerimeter };+export { name, draw, reportArea, reportPerimeter };Если бы в
-main.js
при их импорте мы попытались использоватьimport { name, draw, reportArea, reportPerimeter } from './modules/square.js'; +import { name, draw, reportArea, reportPerimeter } from './modules/square.js'; import { name, draw, reportArea, reportPerimeter } from './modules/circle.js'; import { name, draw, reportArea, reportPerimeter } from './modules/triangle.js';@@ -286,7 +286,7 @@ import { name, draw, reportArea, reportPerimeter } from './modules/triangle.js';Вместо этого нам нужно переименовать импорт, чтобы он был уникальным:
-import { name as squareName, +import { name as squareName, draw as drawSquare, reportArea as reportSquareArea, reportPerimeter as reportSquarePerimeter } from './modules/square.js'; @@ -303,13 +303,13 @@ import { name as triangleName,Обратите внимание, что вместо этого вы можете решить проблему в файлах модуля, например.
-// внутри square.js +// внутри square.js export { name as squareName, draw as drawSquare, reportArea as reportSquareArea, reportPerimeter as reportSquarePerimeter };-// внутри main.js +// внутри main.js import { squareName, drawSquare, reportSquareArea, reportSquarePerimeter } from './modules/square.js';И это сработало бы точно так же. @@ -322,11 +322,11 @@ import { squareName, drawSquare, reportSquareArea, reportSquarePerimeter } from Существует решение получше — импортировать функции каждого модуля внутри объекта модуля. Для этого используется следующая синтаксическая форма:
-import * as Module from './modules/module.js';+import * as Module from './modules/module.js';Эта конструкция берёт все экспорты, доступные внутри
-module.js
и делает их доступными в качестве свойств объектаModule
, фактически давая ему собственное пространство имен. Так например:Module.function1() +Module.function1() Module.function2()и т.д. @@ -335,11 +335,11 @@ Module.function2() вы снова увидите тот же самый пример, но переписанный с учётом преимуществ этого нового синтаксиса. В модулях все экспорты представлены в следующей простой форме: -export { name, draw, reportArea, reportPerimeter };+export { name, draw, reportArea, reportPerimeter };С другой стороны, импорт выглядит так:
-import * as Canvas from './modules/canvas.js'; +import * as Canvas from './modules/canvas.js'; import * as Square from './modules/square.js'; import * as Circle from './modules/circle.js'; @@ -347,7 +347,7 @@ import * as Triangle from './modules/triangle.js';В каждом случае теперь вы можете получить доступ к импорту модуля под указанным свойством объекта, например:
-let square1 = Square.draw(myCanvas.ctx, 50, 50, 100, 'blue'); +let square1 = Square.draw(myCanvas.ctx, 50, 50, 100, 'blue'); Square.reportArea(square1.length, reportList); Square.reportPerimeter(square1.length, reportList);@@ -360,7 +360,7 @@ Square.reportPerimeter(square1.length, reportList);Вы можете увидеть пример нашего модуля для рисования фигур, переписанного с помощью классов ES в нашей classes директории. В качестве примера, файд
-square.js
теперь содержит всю свою функциональность в одном классе:class Square { +class Square { constructor(ctx, listId, length, x, y, color) { ... } @@ -374,15 +374,15 @@ Square.reportPerimeter(square1.length, reportList);который мы затем экспортируем:
-export { Square };+export { Square };Далее в
-main.js
, мы импортируем его так:import { Square } from './modules/square.js';+import { Square } from './modules/square.js';А затем используем импортированный класс, чтобы нарисовать наш квадрат:
-let square1 = new Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, 'blue'); +У вас может быть несколько уровней зависимостей, где вы хотите упростить вещи, объединив несколько подмодулей в один родительский модуль. Это возможно с использованием следующего синтаксиса экспорта в родительском модуле: -let square1 = new Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, 'blue'); square1.draw(); square1.reportArea(); square1.reportPerimeter();@@ -393,7 +393,7 @@ square1.reportPerimeter();export * from 'x.js' +Мы также переместили наши подмодули в дочернюю директорию внутри директорииexport * from 'x.js' export { name } from 'x.js'Для примера посмотрите на нашу директорию module-aggregation. @@ -402,7 +402,7 @@ export { name } from 'x.js'
modules
под названиемshape
. Итак, структура модуля в этом примере: -modules/ +modules/ canvas.js shapes.js shapes/ @@ -412,12 +412,12 @@ export { name } from 'x.js'В каждом из подмодулей экспорт имеет одинаковую форму, например:
-export { Square };+export { Square };Далее идет агрегирование. Внутри
-shapes.js
, мы добавляем следующие строки:export { Square } from './shapes/square.js'; +export { Square } from './shapes/square.js'; export { Triangle } from './shapes/triangle.js'; export { Circle } from './shapes/circle.js';@@ -429,13 +429,13 @@ export { Circle } from './shapes/circle.js';Итак, теперь в файле
-main.js
мы можем получить доступ ко всем трём классам модулей, заменив:import { Square } from './modules/square.js'; +import { Square } from './modules/square.js'; import { Circle } from './modules/circle.js'; import { Triangle } from './modules/triangle.js';на единственную строку кода:
-import { Square, Circle, Triangle } from './modules/shapes.js';+import { Square, Circle, Triangle } from './modules/shapes.js';Динамическая загрузка модулей
@@ -446,7 +446,7 @@ import { Triangle } from './modules/triangle.js';Поддержка динамической загрузки модулей позволяет вызывать {{JSxRef("Statements/import", "import()", "#Dynamic_Imports")}} в качестве функции, передав ей аргументом путь к модулю. Данный вызов возвращает {{JSxRef("Promise")}}, который резолвится объектом модуля (см. Создание объекта модуля), предоставляя вам доступ к экспорту указанного модуля, например:
-import('./modules/myModule.js') +import('./modules/myModule.js') .then((module) => { // делаем что-то с функционалом из импортированного модуля });@@ -460,11 +460,11 @@ import { Triangle } from './modules/triangle.js';Далее в
-main.js
мы взяли ссылку на каждую кнопку, используя вызовdocument.querySelector()
:let squareBtn = document.querySelector('.square');+let squareBtn = document.querySelector('.square');Затем мы добавляем обработчик событий на каждую кнопку, чтобы при нажатии соответствующий модуль динамически загружался и использовался для рисования фигуры:
-squareBtn.addEventListener('click', () => { +squareBtn.addEventListener('click', () => { import('./modules/square.js').then((Module) => { let square1 = new Module.Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, 'blue'); square1.draw(); diff --git a/files/ru/web/javascript/guide/regular_expressions/character_classes/index.html b/files/ru/web/javascript/guide/regular_expressions/character_classes/index.html index f9e2b054a3..8a379e7653 100644 --- a/files/ru/web/javascript/guide/regular_expressions/character_classes/index.html +++ b/files/ru/web/javascript/guide/regular_expressions/character_classes/index.html @@ -149,7 +149,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions/Character_ClassesПоиск серии цифр
-var randomData = "015 354 8787 687351 3512 8735"; +var randomData = "015 354 8787 687351 3512 8735"; var regexpFourDigits = /\b\d{4}\b/g; // \b определяет границу поиска (например, не начинает поиск с середины слова) // \d{4} определяет цифру, четыре раза @@ -162,7 +162,7 @@ console.table(randomData.match(regexpFourDigits));Поиск слов (латинский алфавит), начинающих с A
-var aliceExcerpt = "I’m sure I’m not Ada,’ she said, ‘for her hair goes in such long ringlets, and mine doesn’t go in ringlets at all."; +var aliceExcerpt = "I’m sure I’m not Ada,’ she said, ‘for her hair goes in such long ringlets, and mine doesn’t go in ringlets at all."; var regexpWordStartingWithA = /\b[aA]\w+/g; // \b определяет границу поиска (например, не начинает поиск с середины слова) // [aA] определяет букву a или A @@ -176,7 +176,7 @@ console.table(aliceExcerpt.match(regexpWordStartingWithA));Вместо латинского алфавита, мы может использовать диапазон Unicode символов для определения слова (благодаря этому мы можем работать с текстами написанным, например на русском или арабском языке or Arabic). Unicode содержит большинство символов используемых на планете, мы так же можем объединять их диапазоны и классы символов.
-var nonEnglishText = "Приключения Алисы в Стране чудес"; +var nonEnglishText = "Приключения Алисы в Стране чудес"; var regexpBMPWord = /([\u0000-\u0019\u0021-\uFFFF])+/gu; // BMP goes through U+0000 to U+FFFF but space is U+0020 diff --git a/files/ru/web/javascript/guide/regular_expressions/index.html b/files/ru/web/javascript/guide/regular_expressions/index.html index d6a9f157de..d92683f778 100644 --- a/files/ru/web/javascript/guide/regular_expressions/index.html +++ b/files/ru/web/javascript/guide/regular_expressions/index.html @@ -14,7 +14,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions
- Используя литерал регулярного выражения, например:
-@@ -22,7 +22,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressionsvar re = /ab+c/; +var re = /ab+c/;- Вызывая функцию конструктор объекта
RegExp
, например:-@@ -321,7 +321,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressionsvar re = new RegExp("ab+c"); +var re = new RegExp("ab+c");Экранирование пользовательского ввода, соответствующего буквенной строке внутри регулярного выражения, может быть достигнуто простой заменой:
-function escapeRegExp(string){ +
@@ -379,18 +379,18 @@ translation_of: Web/JavaScript/Guide/Regular_Expressionsfunction escapeRegExp(string){ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string }
В след. примере, скрипт использует метод
-exec
чтобы найти совпадения в строке.var myRe = /d(b+)d/g; +var myRe = /d(b+)d/g; var myArray = myRe.exec("cdbbdbsbz");Если вам не нужен доступ к свойствам регулярного выражения, то альтернативный способ получить
-myArray
можно так:var myArray = /d(b+)d/g.exec("cdbbdbsbz"); +var myArray = /d(b+)d/g.exec("cdbbdbsbz");Если вы хотите сконструировать регулярное выражение из строки, другой способ сделать это приведён ниже:
-var myRe = new RegExp("d(b+)d", "g"); +var myRe = new RegExp("d(b+)d", "g"); var myArray = myRe.exec("cdbbdbsbz");@@ -444,25 +444,25 @@ var myArray = myRe.exec("cdbbdbsbz");Как показано во втором варианте этого примера, вы можете использовать регулярное выражение, созданное при помощи инициализатора объекта, без присваивания его переменной. Таким образом, если вы используете данную форму записи без присваивания переменной, то в процессе дальнейшего использования вы не можете получить доступ к свойствам данного регулярного выражения. Например, у вас есть следующий скрипт:
-var myRe = /d(b+)d/g; +var myRe = /d(b+)d/g; var myArray = myRe.exec("cdbbdbsbz"); console.log("The value of lastIndex is " + myRe.lastIndex);Этот скрипт выведет:
-The value of lastIndex is 5 +The value of lastIndex is 5Однако, если у вас есть следующий скрипт:
-var myArray = /d(b+)d/g.exec("cdbbdbsbz"); +var myArray = /d(b+)d/g.exec("cdbbdbsbz"); console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);Он выведет:
-The value of lastIndex is 0 +The value of lastIndex is 0Совпадения@@ -477,7 +477,7 @@ console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);/d(b+)d/g
в двух случаях являются разными объектами регулярного выражения и, следовательно, имеют различные значения для свойстваlastIndex
. Если вам необходим доступ к свойствам объекта, созданного при помощи инициализатора, то вы должны сначала присвоить его переменной.Следующий скрипт использует метод
-replace(),
чтобы поменять местами слова (символы) в строке. Для замены текста скрипт использует обозначения$1
и$2
для обозначения первого и второго совпадения скобочного выражения.var re = /(\w+)\s(\w+)/; +var re = /(\w+)\s(\w+)/; var str = "John Smith"; var newstr = str.replace(re, "$2, $1"); console.log(newstr); @@ -519,19 +519,19 @@ console.log(newstr);Чтобы использовать флаги в шаблоне регулярного выражения используйте следующий синтаксис:
-var re = /pattern/flags; +var re = /pattern/flags;или
-var re = new RegExp("pattern", "flags"); +var re = new RegExp("pattern", "flags");Обратите внимание, что флаги являются неотъемлемой частью регулярного выражения. Флаги не могут быть добавлены или удалены позднее.
Для примера,
-re = /\w+\s/g
создаёт регулярное выражение, которое ищет один или более символов, после которых следует пробел и ищет данное совпадение на протяжении всей строки.var re = /\w+\s/g; +var re = /\w+\s/g; var str = "fee fi fo fum"; var myArray = str.match(re); console.log(myArray); @@ -539,12 +539,12 @@ console.log(myArray);Выведет ["fee ", "fi ", "fo "]. В этом примере вы бы могли заменить строку:
-var re = /\w+\s/g; +var re = /\w+\s/g;на следующую:
-var re = new RegExp("\\w+\\s", "g"); +var re = new RegExp("\\w+\\s", "g");и получить тот же результат.
@@ -559,7 +559,7 @@ console.log(myArray);След. пример иллюстрирует формирование регулярного выражения и использование
-string.split()
иstring.replace()
. Он очищает неправильно сформатированную исходную строку, которая содержит имена в неправильном порядке (имя идёт первым) разделённые пробелами, табуляцией и одной точкой с запятой. В конце, изменяется порядок следования имён (фамилия станет первой) и сортируется список.// The name string contains multiple spaces and tabs, +// The name string contains multiple spaces and tabs, // and may have multiple spaces between first and last names. var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand "; @@ -629,7 +629,7 @@ console.log(output.join("\n"));Событие "Изменить" активируется, когда пользователь подтвердит ввод значения регулярного выражения, нажав клавишу "Enter".
-<!DOCTYPE html> +<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> @@ -655,5 +655,5 @@ console.log(output.join("\n")); </html>-autoPreviousNext("JSGChapters"); +autoPreviousNext("JSGChapters");-- cgit v1.2.3-54-g00ecf