This page has been robot translated, sorry for typos if any. Original content here.

Шпаргалка за регулярними виразами 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])) ...