Гіпертекст у форматі HTML, CSS, XML, власні варіанти рядкового подання інформації з сервера надходять в середу клієнта - браузер.
jаvascript - основний інструмент, за допомогою якого можна розібрати отриману інформацію, використовувати і розписати її по тегам сторінки.
Рядки і jаvascript replace
Найчастіше потік інформації формує сервер. Робота браузера полягає в тому, щоб вибрати потрібний і використовувати відповідним чином. Рядки може формувати сам jаvascript. Джерелом інформації може виступати також текст сторінки або елемент сформованого з неї дерева DOM.
Зазвичай потрібно просто знайти потрібну підрядок в рядку, або знайти щось одне і замінити на щось інше. jаvascript відрізняється від інших мов програмування, і до його логіці слід звикнути. Перш за все, функція обробки рядків на jаvascript - replace (метод рядка). Фактично, кожна рядок має власний інструмент для її використання.
До будь рядку можна застосувати метод replace з двома обов'язковими аргументами. Перший аргумент - регулярний вираз з прапорами, другий - те, на що змінюється знайдене або функція, яка буде викликана при кожному виявленому збігу.
Приклад пошуку/заміни
Проста заміна першого входження підрядка abc на def: var expReg = /abc/ ; var strTxt = 'alfa abc, beta, aBc,ABC, end of line' ; var strRes = strTxt . replace ( expReg , 'def' ); результат: 'alfa def, beta, aBc,ABC, end of line", тобто була виконана заміна лише першого входження підрядка abc. якщо до регулярного висловом expReg додати прапор 'g': var expReg = /abc/g; результат буде таким же. Інші входження підрядка записані в іншому регістрі, тому jаvascript replace, виконавши глобальний пошук за рядком, нічого не замінить. Доповнивши регулярний вираз прапором 'i': var expReg = /abc/gi; //можна писати 'gi' або 'ig' - ефект буде той же отримаємо глобальну заміну і результат: 'alfa def, beta, def,def, end of line'.
Обробка рядка за допомогою функції
jаvascript replace function - свого роду цикл, який визначається рядком. Кожне збіг шуканої підрядка у вихідній рядку буде приводити до виклику функції. Якщо не розглядати рядок як предмет обробки в плані пошуку/заміни, можна говорити про власному варіанті синтаксису циклу в межах синтаксису jаvascript.
В результаті виконання цього коду буде виведено: 'alfa x1 beta, x2x3 end of line'. У параметрах функції: m - то з чим збіглася одна з дужками () в регулярному виразі пошуку; p1 p2 pN - вміст співпала дужки; o - зміщення, знайденої підрядка; s - вихідна рядок. У контексті сказаного слід особливо звернути увагу: одна справа обробка рядків, коли щось не підлягає заміні, інша справа, коли рядок являє собою керуючу послідовність, і всі збіги потрапляють у функцію, яка виконує певний набір дій.
Якщо піти далі, то таким чином організований цикл можна зробити рекурсивним. У функцію, викликану в методі jаvascript str replace потрапляє як сама str, так і знайдений фрагмент. Ніщо не заважає застосувати до знайденого фрагменту також виклик методу replace. В результаті вийде иерархическо-рекурсивний механізм з конкретним числом дій.
Запропонована ідея володіє набагато більшими можливостями, ніж класичний цикл for () {}, while () {}. do {} while (). Алгоритм такої ідеї ніколи не зможе зациклитися. За логікою речей і суті процесу написання програм, не настільки важливо, якими синтаксичними конструкціями маніпулює програміст, важливо, наскільки правильно і надійно вирішена поставлена задача. jаvascript - специфічну мову програмування, і його сфера компетенції відрізняється від інших мов, насамперед прив'язкою до DOM - адекватного відображення вмісту сторінки (HTML + CSS) на дерево об'єктів, яке можна читати і яким можна керувати. Серверним мовам таке управління доступно лише побічно, та й не надто розумно робити за межами браузера те, що стосується інформації всередині браузера.
Помилки і принципи обробки рядків
Обробка інформації - основна турбота будь-якої мови програмування. Навіть якщо йдеться про мови начебто Fortran або Lisp/Prolog: математичні обчислення і логіка систем продукцій, в кінцевому підсумку, - це обробка інформації. Перше, що робить будь-яку мову програмування - обробляє рядка. У цьому контексті jаvascript str replace пропонує свій варіант обробки рядків, який багато в чому краще багатьох серверних мов.
Слід мати на увазі, що за своєю природою та місцем застосування jаvascript має специфічні особливості, але вони скоріше роблять обличчя мови більш унікальним, чим створюють проблему розробнику. Якщо щось з чимось не справляється, то інтерпретатор мови просто пропускає хибну конструкцію. Правда, це часом дуже важко помітити, але якщо вести налагодження в режимі розробника, то всі проблемні місця можна буде відразу помітити.
Відома помилка: jаvascript error replace child - скоріше недоробка соціальної мережі VK, ніж проблема мови. При обробці рядків, як і по іншим синтаксичним конструкціям jаvascript не відрізняється багатослівністю і просто пропускає те що не розуміє або те, що вважає некоректним.
Використовуючи jаvascript, завжди бажано мінімізувати використання його можливостей, насамперед регулярних виразів. Об'єкт RegExp - хороше рішення для обробки рядків, але чим менше і простіше його патерн, тим надійніше та ефективніше використання.