renovate regexps

This commit is contained in:
Ilya Kantor 2015-03-22 18:54:57 +03:00
parent 9122b131d0
commit f6f6b20178
17 changed files with 397 additions and 138 deletions

View file

@ -6,7 +6,9 @@
Например, нам нужно найти языки программирования: HTML, PHP, Java и JavaScript.
Соответствующее регулярное выражение: <code class="pattern">/html|php/java(script)?/</code>:
Соответствующее регулярное выражение: <code class="pattern">html|php|java(script)?</code>.
Пример использования:
```js
//+ run
@ -14,13 +16,11 @@ var reg = /html|php|css|java(script)?/gi
var str = "Сначала появился HTML, затем CSS, потом JavaScript"
alert(str.match(reg)) // 'HTML', 'CSS', 'JavaScript'
alert( str.match(reg) ) // 'HTML', 'CSS', 'JavaScript'
```
**Альтернация имеет очень низкий приоритет.**
Чтобы регэксп находил одновременно <code class="match">gr<b>a</b>y</code> и <code class="match">gr<b>e</b>y</code>, можно использовать <code class="pattern">gr(a|e)y</code> или <code class="pattern">gr[ae]y</code>, но не <code class="pattern">gra|ey</code>. Последний регэксп применит альтернацию к подвыражениям: <code class="pattern">gra</code> (ИЛИ) <code class="pattern">ey</code>.
Мы уже знаем похожую вещь -- квадратные скобки. Они позволяют выбирать между символами, например <code class="pattern">gr[ae]y</code> найдёт <code class="match">gray</code>, либо <code class="match">grey</code>.
Альтернация работает уже не посимвольно, а на уровне фраз и подвыражений. Регэксп <code class="pattern">A|B|C</code> обозначает поиск одного из выражений: `A`, `B` или `C`, причём в качестве выражений могут быть другие, сколь угодно сложные регэкспы.
Для указания границ альтернации используют скобки `(...)`, например: <code class="pattern">before(XXX|YYY)after</code> будет искать <code class="match">beforeXXXafter</code> или <code class="match">beforeYYYafter</code>.