Шпаргалка за регулярними виразами JavaScript

По темі:


Загальний опис

Регулярні вислови є зразки для пошуку заданих комбінацій символів в текстових рядках (такий пошук називається зіставленням зі зразком). Існує два способи привласнення змінним регулярних виразів, а саме:
Використання ініціалізатор об'єкта: var re = / pattern / switch ?.
Використання конструктора RegExp: var re = new RegExp ( "pattern" [, "switch"]?).
Тут pattern - регулярний вираз, а switch - необов'язкові опції пошуку.

Ініціалізатор об'єкта, наприклад, var re = / ab + c /, слід застосовувати в тих випадках, коли значення регулярного вираження залишається незмінним під час роботи сценарію. Такі регулярні вирази компілюються в процесі завантаження сценарію і, отже, виконуються швидше.

Виклик конструктора, наприклад, var re = new RegExp ( "ab + c"), слід застосовувати в тих випадках, коли значення змінної буде змінюватися. Якщо ви збираєтеся використовувати регулярний вираз кілька разів, то має сенс скомпілювати його методом compile для більш ефективного пошуку зразків.

При створенні регулярного виразу слід враховувати, що укладення його в лапки тягне за собою необхідність використовувати escape-послідовності, як і в будь-який інший строковою константі. Наприклад, наступні два вирази еквівалентні:

	 var re = / \ w + / g;
	 var re = new RegExp ( "\\ w +", "g");  // У рядку "\" має замінюватися на "\\"
	

Примітка: регулярний вираз не може бути порожнім: два символи // поспіль задають початок коментаря. Тому для завдання порожнього регулярного вираження використовуйте вираз /.?/.

Регулярні вирази використовуються методами exec і test об'єкта RegExp і методами match, replace, search і split об'єкта String. Якщо нам потрібно просто перевірити, чи містить даний рядок підрядок, відповідну зразком, то використовуються методи test або search. Якщо ж нам необхідно витягти підрядок (або підрядка), відповідні зразком, то нам доведеться скористатися методами exec або match. Метод replace забезпечує пошук заданого підрядка і заміни її на інший рядок, а метод split дозволяє розбити рядок на кілька подстрок, грунтуючись на регулярному виразі або звичайною текстовому рядку. Більш докладні відомості про застосування регулярних виразів наведено в описі відповідних методів.

Синтаксис регулярних виразів

Регулярний вираз може складатися зі звичайних символів; в цьому випадку воно буде відповідати заданій комбінації символів в рядку. Наприклад, вираз / ком / відповідає виділеним підрядками в наступних рядках: "грудка", "ласунка", "головком флоту". Однак, гнучкість і міць регулярними виразами надає можливість використання в них спеціальних символів, які перераховані в наступній таблиці.

Спеціальні символи в регулярних виразах:

\ - Для символів, які зазвичай трактуються буквально, означає, що наступний символ є спеціальним. Наприклад, / n / відповідає букві n, а / \ n / відповідає символу перекладу рядка. Для символів, які зазвичай трактуються як спеціальні, означає, що символ повинен розумітися буквально. Наприклад, / ^ / означає початок рядка, а / \ ^ / відповідає просто символу ^. / \\ / Відповідає зворотної косої межі \.

^ - Відповідає початку рядка.

$ - Відповідає кінця рядка.

* - Відповідає повторення попереднього символу нуль або більше разів.

+ - Відповідає повторення попереднього символу один або більше разів.

? - Відповідає повторення попереднього символу нуль або один раз.

. - Відповідає будь-якому символу, крім символу нового рядка.

(pattern) - Відповідає рядку pattern і запам'ятовує знайдене відповідність.

(?: pattern) - Відповідає рядку pattern, але не запам'ятовує знайдене відповідність. Використовується для угруповання частин зразка, наприклад, / ко (?: Т | шка) / - це короткий запис вираження / кіт | кішка /.

(? = pattern) - Відповідність з "загляданням вперед", відбувається при відповідності рядка pattern без запам'ятовування знайденого відповідності. Наприклад, / Windows (? = 95 | 98 | NT | 2000) / відповідає "Windows" в рядку "Windows 98", але не відповідає в рядку "Windows 3.1". Після зіставлення пошук триває з позиції, наступної за знайденим відповідністю, без урахування заглядання вперед.

(?! pattern) - Відповідність з "загляданням вперед", відбувається при невідповідності рядка pattern без запам'ятовування знайденого відповідності. Наприклад, / Windows (?! 95 | 98 | NT | 2000) / відповідає "Windows" в рядку "Windows 3.1", але не відповідає в рядку "Windows 98". Після зіставлення пошук триває з позиції, наступної за знайденим відповідністю, без урахування заглядання вперед.

x | y - Відповідає x або y.

{n} - n - невід'ємне число. Відповідає рівно n входженням попереднього символу.

{n,} - n - невід'ємне число. Відповідає n або більше входженням попереднього символу. / X {1,} / еквівалентно / x + /. / X {0,} / еквівалентно / x * /.

{n, m} - n і m - невід'ємне числа. Відповідає не менше ніж n і не більше ніж m входженням попереднього символу. / X {0,1} / еквівалентно / x? /.

[xyz] - Відповідає будь-якому символу з ув'язнених в квадратні дужки.

[^ xyz] - Відповідає будь-якому символу, крім вкладених у квадратні дужки.

[az] - Відповідає будь-якому символу у вказаному діапазоні.

[^ az] - Відповідає будь-якому символу, крім лежать в зазначеному діапазоні.

\ b - Відповідає кордоні слова, т. е. позиції між словом і пропуском або переведенням рядка.

\ B - Відповідає будь-якій позиції, окрім кордоні слова.

\ СX - Відповідає символу Ctrl + X. Наприклад, / \ cI / еквівалентно / \ t /.

\ d - Відповідає цифрі. Еквівалентно [0-9].

\ D - Відповідає нецифровому символу. Еквівалентно [^ 0-9].

\ f - Відповідає символу перекладу формату (FF).

\ n - Відповідає символу перекладу рядка (LF).

\ r - Відповідає символу повернення каретки (CR).

\ s - Відповідає символу пробілу. Еквівалентно / [\ f \ n \ r \ t \ v] /.

\ S - Відповідає будь-якому непробельний символу. Еквівалентно / [^ \ f \ n \ r \ t \ v] /.

\ t - Відповідає символу табуляції (HT).

\ v - Відповідає символу вертикальної табуляції (VT).

\ w - Відповідає латинської букви, цифри або підкреслення. Еквівалентно / [A-Za-z0-9_] /.

\ W - Відповідає будь-якому символу, крім латинської букви, цифри або підкреслення. Еквівалентно / [^ A-Za-z0-9_] /.

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

\ 0n n - вісімкове число, не більше 377. Відповідає символу з восьмеричним кодом n. Наприклад, / \ 011 / еквівалентно / \ t /.

\ xn n - шістнадцяткове число, що складається з двох цифр. Відповідає символу з шістнадцятковим кодом n. Наприклад, / \ x31 / еквівалентно / 1 /.

\ un n - шістнадцяткове число, що складається з чотирьох цифр. Відповідає символу Unicode з шістнадцятковим кодом n. Наприклад, / \ u00A9 / еквівалентно / c /.

Регулярні вирази обчислюються аналогічно іншим виразами JavaScript, т. Е. З урахуванням пріоритету операцій: операції, що мають більший пріоритет, виконуються першими. Якщо операції мають рівний пріоритет, то вони виконуються зліва направо. У наступній таблиці наведено список операцій регулярних виразів в порядку убування їх пріоритетів; операції, розташовані в одному рядку таблиці, мають рівний пріоритет.

операції:
  \
 () (? :) (? =) (?!) []
	 * +?  .  {N} {n,} {n, m}
	 ^ $ \ Метасимвол
	 |
	

Опції пошуку

При створенні регулярного виразу ми можемо вказати додаткових опції пошуку:
i (ignore case). Чи не розрізняти великі та малі літери.
g (global search). Глобальний пошук всіх входжень зразка.
m (multiline). Складний пошук.
Будь-які комбінації цих трьох опцій, наприклад ig або gim.

приклад

	 var s = "Вивчаємо мову JavaScript";
	 var re = / JAVA /;
	 var result = re.test (s)?  "" ":" "Не";
	 document.write ( "Рядок" "+ s + result +" відповідає зразку "+ re);
	

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

Рядок "Вивчаємо мову JavaScript" не відповідає зразку / JAVA /

Якщо ми тепер замінимо другий рядок прикладу на var re = / JAVA / i ;, то на екран буде виведений текст:

Рядок "Вивчаємо мову JavaScript" відповідає зразку / JAVA / i


Тепер розглянемо опцію глобального пошуку. Вона зазвичай застосовується методом replace при пошуку зразка і заміни знайденої підрядка на нову. Справа в тому, що за умовчанням цей метод робить заміну тільки першої знайденої підрядка і повертає отриманий результат. Розглянемо наступний сценарій:

	 var s = "Ми пишемо сценарії на JavaScript," +
	 "Але JavaScript - не єдиний сценарний мову.";
	 var re = / JavaScript /;
	 document.write (s.replace (re, "VBScript"));
	

Він виводить у вікно оглядача текст, який явно не відповідає бажаного результату: Ми пишемо сценарії на VBScript, але JavaScript - не єдиний сценарний мову. Для того, щоб все входження рядка "JavaScript" були замінені на "VBScript", ми повинні змінити значення регулярного вираження на var re = / JavaScript / g; . Тоді результуюча рядок матиме вигляд:

Ми пишемо сценарії на VBScript, але VBScript - не єдиний сценарний мову.

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

Запам'ятовування знайдених подстрок

Якщо частина регулярного виразу укладена в круглі дужки, то відповідна їй підрядок буде запам'ятати для подальшого використання. Для доступу до запомненним підрядками використовуються властивості $ 1,:, $ 9 об'єкта RegExp або елементи масиву, що повертається методами exec і match. В останньому випадку кількість знайдених і запам'ятали підрядків не обмежена.

Наступний сценарій використовує метод replace для перестановки слів в рядку. Для заміни знайденого тексту використовуються властивості $ 1 і $ 2.

	 var re = / (\ w +) \ s (\ w +) / i;
	 var str = "Mikhail Bulgakov";
	 document.write (str.replace (re, "$ 2, $ 1"))
	

Цей сценарій виведе у вікно оглядача текст:

Bulgakov, Mikhail

тому \ W = [A-Za-z0-9_], то російські літери працювати не будуть. Якщо ми хочемо використовувати російські букви, то нам прийдеться трошки модифікувати код:

	 var re = / ([а-я] +) \ s ([а-я] +) / i; 
	 var str = "Михайло Булгаков"; 
	 document.write (str.replace (re, "$ 2, $ 1"));  // Булгаков, Михайло
	

Цей сценарій виведе у вікно оглядача текст:

Булгаков, Михайло

Вступ

Основні поняття

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

Регулярний вираз (regular expression) - засіб для обробки рядків або послідовність символів, що визначає шаблон тексту.

Модифікатор - призначений для "інструктування" регулярного виразу.
Метасимволи - спеціальні символи, які служать командами мови регулярних виразів.

Регулярний вираз задається як звичайна змінна, тільки замість лапок використовується слеш, наприклад:

  var reg = / рег_вираженіе / 

Під найпростішими шаблонами будемо розуміти такі шаблони, які не потребують будь-яких спеціальних символах.

Припустимо, нашим завданням є заміна всіх букв "р" (малих і великих) на латинську велику букву "R" в словосполученні Регулярні вирази.

Створюємо шаблон var reg = / р / і воспользуясь методом replace здійснюємо задумане

	 <Script language = "JavaScript">
		 var str = "Регулярні вирази"
		 var reg = / р /
		 var result = str.replace (reg, "R")
		 document.write (result)
	 </ Script>
	

В результаті отримаємо рядок 'РегуляRние вираження', заміна відбулася лише на першому входженні букви "р" з урахуванням регістру. Але під умови нашого завдання цей результат не підходить ... Тут нам знадобляться модифікатори "g" і "i", які можуть використовуватися як окремо, так і спільно.
Ці модифікатори ставляться в кінці шаблону регулярного виразу, після слеша, і вживаються у такому значенні: модифікатор "g" - задає пошук в рядку як "глобальний", тобто в нашому випадку заміна відбудеться для всіх входжень літери "р". Тепер шаблон виглядає так: var reg = / р / g, підставивши його в наш код

	 <Script language = "JavaScript">
		 var str = "Регулярні вирази"
		 var reg = / р / g
		 var result = str.replace (reg, "R")
		 document.write (result)
	 </ Script>
	
отримаємо рядок 'РегуляRние виRаженія'.

Модифікатор "i" - задає пошук в рядку без урахування регістру, додавши цей модифікатор в наш шаблон var reg = / р / gi, після виконання скрипта отримаємо шуканий результат нашого завдання - 'RегуляRние виRаженія'.

Спеціальні символи (метасимволи)

Метасимволи задають тип символів шуканого рядка, спосіб оточення шуканої рядка в тексті, а так само кількість символів окремого типу в просматриваемом тексті. Тому метасимволу можна розділити на три групи:

Метасимволи пошуку збігів.
Кількісні метасимволи.
Метасимволи позиціонування.
Метасимволи пошуку збігів

\ b межа слова, задає умову, при якому шаблон повинен виконуватися на початку або кінці слів.

\ B НЕ межа слова, задає умову, при якому шаблон не виконується на початку або кінці слова.

\ d цифра від 0 до 9.

\ D не цифри.

\ s одиночний порожній символ, відповідає символу пробілу.

\ S одиночний непорожній символ, будь-який один символ за винятком пробілу.

\ w буква, цифра або символ підкреслення.

\ W не буква, цифра або символ підкреслення.

. будь-який символ, будь-які знаки, букви, цифри і т.д.

[] Набір символів, задає умову, при якому шаблон повинен виконуватися при будь-якому збігу символів увязнених в квадратні дужки.

[^] Набір не входять символів, задає умову, при якому шаблон не повинен виконуватися при будь-якому збігу символів увязнених в квадратні дужки.

кількісні метасимволи

* Нуль і більшу кількість разів.

? Нуль або один раз

+ Один і більшу кількість разів.

{n} точно n разів.

{n,} n або більшу кількість разів.

{n, m} принаймні, n разів, але не більше ніж m разів.

метасимволи позиціонування

^ На початку рядка.

$ В кінці рядка.

Деякі методи для роботи з шаблонами

replace - даний метод ми вже використали на самому початку статті, він призначений для пошуку зразка і заміни знайденої підрядка на нову підрядок.

test - даний метод перевіряє, чи є збіги в рядку щодо шаблону і повертає false, якщо зіставлення зі зразком закінчилося невдачею, в іншому випадку true.

приклад

	 <Script language = "JavaScript">
		 var str = "JavaScript"
		 var reg = / PHP /
		 var result = reg.test (str)
		 document.write (result)
	 </ Script>
	

виведе в якості результату false, тому що рядок "JavaScript" не дорівнює рядку "PHP".

Також метод test може повертати замість true або false будь-яку іншу рядок задану програмістом.
наприклад:

	 <Script language = "JavaScript">
		 var str = "JavaScript"
		 var reg = / PHP /
		 var result = reg.test (str)?  "Рядок збіглася": "Рядок не збіглася"
		 document.write (result)
	 </ Script>
	
в цьому випадку в якості результату буде рядок 'Рядок не збіглася'.

exec - даний метод виконує зіставлення рядка із зразком, заданим шаблоном. Якщо зіставлення зі зразком закінчилося невдачею, то повертається значення null. В іншому випадку результатом є масив підрядків, відповідних заданому зразку. / * Перший елемент масиву дорівнюватиме вихідної рядку задовольняє заданим шаблоном * /
наприклад:

	 <Script language = "JavaScript">
		 var reg = / (\ d +). (\ d +). (\ d +) /
		 var arr = reg.exec ( "Я народився 15.09.1980")
		 document.write ( "Дата народження:", arr [0], "<br>")
		 document.write ( "День народження:", arr [1], "<br>")
		 document.write ( "Місяць народження:", arr [2], "<br>")
		 document.write ( "Рік народження:", arr [3], "<br>")
	 </ Script>
	

в результаті отримаємо чотири рядки:
Дата народження: 15.09.1980
День народження: 15
Місяць народження: 09
Рік народження: 1980

висновок

У статті відображено далеко не всі можливості і принади регулярних виразів, для більш глибокого вивчення цього питання пораджу вивчити об'єкт RegExp. Так само хочу звернути увагу на те, що синтаксис регулярних виразів не чим не відрізняється як в JavaScript, так і в PHP. Наприклад, для перевірки правильності введення e-mail, регулярний вираз, що для JavaScript, що для PHP буде виглядати однаково
/[0-9a-z_]+@[0-9a-z_^.]+.[az]{2,3}/i.

Регулярні вирази - це свого роду шаблони пошуку певних комбінацій символів в рядках, при цьому регулярні вирази полягають в Слеш. Нижче перераховані літерали регулярних виразів.

літерали

літерал опис
\ Входить до складу спеціальних символів, а так само дає зрозуміти інтерпретатору, що наступний символ - НЕ літерал. Використовується перед вісімковими кодами символів для вилучення з пам'яті збережених подвираженій і для використання в регулярному виразі літерала.
^ початок рядка
$ кінець рядка
* Чи означає, що попередній символ має зустрітися в рядку багато разів або не зустрітися
+ Чи означає, що попередній символ має зустрітися в рядку один або кілька разів
? Чи означає, що попередній символ має зустрітися в рядку один раз або не зустрітися
{Число} Чи означає, що попередній символ має зустрітися в рядку вказане число разів
{Число,} Чи означає, що попередній символ має зустрітися в рядку вказане число разів і більше
{Число1, число2} Чи означає, що попередній символ має зустрітися в рядку від першого до другого числа раз
. Чи означає будь-який символ окрім \ n (новий рядок)
(Підвираз) Шукає підвираз і зберігає в пам'яті знайдених групу символів
\ Номер групи Витягує зазначену групу символів, збережену за допомогою попереднього литерала
сімвол1 | символ 2 Шукає один з двох символів
[Набір символів] Шукає символ з заданого набору
[^ Набір символів] Шукає будь-який символ, що не увійшов до набір
\ b Чи означає кордон слова, позицію між словом і пропуском
\ B Чи означає кордон пробілу, позицію між пропуском і словом
\ c Збігається з керуючому символом виду "Ctrl" + "символ"
\ d Будь-яка цифра
\ D Будь нецифровий символ
\ f Символ перекладу сторінки
\ n Символ нового рядка
\ r Символ повернення каретки
\ s Пробіл, табуляція, новий рядок або новий рядок
\ t табуляція
\ v вертикальна табуляція
\ w Буква, цифра або підкреслення
\ xКод Символ із зазначеним шеснадцатерічним кодом
\ oКод Символ із зазначеним восмерічним кодом
\ Номер групи Витягує з пам'яті, збережену раніше групу символів із заданим номером

приклад

	 /(\w+)@({\w\._}+)/
	

Цей вираз шукає будь-яку адресу електронної пошти, розбиваючи його на дві частини: ім'я поштової скриньки і ім'я сервера, і зберігає їх в пам'яті у вигляді груп символів під номерами 1 і 2.

клас RegExp

Цей клас відповідає за обробку рядків за допомогою регелярних виразів. Його конструктор має наступний вигляд:

  RegExp (Регулярний вираз, Прапори)

	

Він приймає тільки один обов'язковий пареметр - це "Регулярний вираз", яке полягає в лапки. Параметр "прапори" представляє собою додаткові умови пошуку і може приймати значення:

  • g - задається глобальний пошук, якщо цей прапор встановлений, то вираз поверне все підходящі слова.
  • i - ігнорування регістра символів
  • m - багаторядковий пошук

Для роботи з регулярними вараженіямі використовуються три методи класу String:

  • match - виконує пошук в рядку, використовуючи регулярний вираз, передане в якості параметра і повертає масив з результатами пошуку. Якщо нічого не знайдено, повертається null.
  • replase - виконує пошук і заміну в рядку, використовуючи регулярні вирази, і повертає отриманий рядок.
  • search - виконує поіка в рядку, використовуючи регулярний вираз, передане в якості параметра, і повертає позицію першого підрядка, що збігається з регулярним виразом.

властивості

властивість опис
lastIndex Задає позицію початку пошуку в рядку
sourse Повертає рядок регулярного виразу (тільки читання)
global Визначає наявність прапора g і повертає соответсявенно true або false
ignoreCase Визначає наявність прапора i і повертає соответсявенно true або false
multilane Визначає наявність прапора m і повертає соответсявенно true або false

методи

метод опис
compile (Регулярне випаженіе g, i, m) Компелірует регулярний вираз у внутрішній формат для прискорення роботи, може використовуватися для зміни регулярного виразу
exec (рядок) Аналогічний методу match класу String, але рядок, де потрібно провести пошук, передається як параметр
test (рядок) Аналогічний методу search класу String, повертає true або false залежно про результатів пошуку

приклад

	 var result, re, str;
	 str = "http://www.netscape.com";
	 re = new RegExp ( "w {3}", "i");
	 result = str.match (re)
	

Тут цю ділянку скрипта здійснює пошук тексту "www" в рядку, яка була присвоєна змінної "str" ​​без обліку регістра, а метод match повертає масив result, що містить результати пошуку.

Глобальний об'єкт RegExp

Цей глобальний об'єкт служить для боступа до результатів пошуку з використанням регулярних виразів. Цей об'єкт створюється самим інтерпритатором і доступний завжди. Формат доступу до його властивостей:

  RegExp.  властивість
 

властивості

властивість опис
$ Номер подвираженія Повертає одне з останніх знайдених подвираженій (залежить від номера). Номер може бути 1-9, т.к.інтерпретатор зберігає в цю властивість тільки дев'ять останніх знайдених подвираженій, для доступу до решти використовується масив, повернутий методами match або exec
index Повертає позоцію в рядку найденої подстроки
input | & _ Повертає рядок, де проводиться пошук
lastIndex Задає позицію початку пошуку в рядку
lastMatch | $ & Повертає останню знайдений підрядок
lastParent | $ + Повертає останню знайдених групу символів, якщо в регулярному виразі використовувалися подвираженія
leftContext | $ ' Повертає рядок, складений з усіх символів від початку рядка до останньої знайденої підрядка, не включаючи її
rightContext | $ ' Повертає рядок, складений з усіх символів від останньої знайденої підрядка, не включаючи її, до кінця заданої стрічки

Приклади використання Регулярних виразів

Розбір URL

	 var re, str, protocol, address, filename, result;
	 str = "http // www.somedomain.ru / index2.html";
	 re = new RegExp ( "((\ w +): \ / \ /)? ([^ /] +) (. *)?", "i");
	 result = re.exec (str);
	 if (result! = null)
	 {
		 protocol = RegExp. $ 2;
		 address = RegExp. $ 3;
		 filename = RegExp. $ 4;
	 }
	

Даний скрипт розбиває інтернет адреса на кілька складових частин. У регелярном вираженні використовувалося кілька подвираженій, які зберігаються інтерпритатором наступним чином: спочатку зберігається зовнішнє вираження, а потім внутрішнє. Після регулярного виразу випливає рядок (result = re.exec (str);), яка починає розбивання адреси, а далі перевіряється правильність адреси та, в разі позитивного результату, відбувається присвоювання змінним відповідних частин адреси.

Функція видалення пробілів на початку і кінці рядка

	 function trim (str)
	 {
	  return str.toString (). replace (/ ^ [] + /, '') .replace (/ [] + $ /, '');
	 }
	
Інший варіант:
	 function trim (str) {
	  return str.replace (/ ^ \ s + | \ s + $ / g, '');
	  }
	

Пошук музики на сторінці

 var mmReg = / (?: http: \ / \ / [\ w.] + \ /)? (?!: \ / \ /) [^ <^> ^ "^ '^ \ s] + \. (? : aiff | au | avi | flv | mid | mov | mp3 | ogg | ra | rm | spl | swf | wav | wma | wmv) (?! \ w) / ig; this.tmp = this.allText.match ( mmReg); if (this.tmp && this.search_common_embeds) if ((this.tmp.length> 1)) if ((this.tmp.length> 2) || (this.tmp [0]! = this.tmp [1])) ...