WIP
This commit is contained in:
parent
ef370b6ace
commit
f21cb0a2f4
71 changed files with 707 additions and 727 deletions
|
@ -0,0 +1,6 @@
|
|||
|
||||
Ответ: `pattern:\b\d\d:\d\d\b`.
|
||||
|
||||
```js run
|
||||
alert( "Завтрак в 09:00 в комнате 123:456.".match( /\b\d\d:\d\d\b/ ) ); // 09:00
|
||||
```
|
|
@ -0,0 +1,9 @@
|
|||
# Найдите время
|
||||
|
||||
Время имеет формат: `часы:минуты`. И часы, и минуты имеют две цифры, например, `09:00`.
|
||||
|
||||
Введите регулярное выражение, чтобы найти время в строке: `subject:Завтрак в 09:00 в комнате 123:456.`
|
||||
|
||||
P.S. В этой задаче пока нет необходимости проверять правильность времени, поэтому `25:99` также может быть верным результатом.
|
||||
|
||||
P.P.S. Регулярное выражение не должно находить `123:456`.
|
53
9-regular-expressions/06-regexp-boundary/article.md
Normal file
53
9-regular-expressions/06-regexp-boundary/article.md
Normal file
|
@ -0,0 +1,53 @@
|
|||
# Word boundary: \b
|
||||
|
||||
A word boundary `pattern:\b` is a test, just like `pattern:^` and `pattern:$`.
|
||||
|
||||
When the regexp engine (program module that implements searching for regexps) comes across `pattern:\b`, it checks that the position in the string is a word boundary.
|
||||
|
||||
There are three different positions that qualify as word boundaries:
|
||||
|
||||
- At string start, if the first string character is a word character `pattern:\w`.
|
||||
- Between two characters in the string, where one is a word character `pattern:\w` and the other is not.
|
||||
- At string end, if the last string character is a word character `pattern:\w`.
|
||||
|
||||
For instance, regexp `pattern:\bJava\b` will be found in `subject:Hello, Java!`, where `subject:Java` is a standalone word, but not in `subject:Hello, JavaScript!`.
|
||||
|
||||
```js run
|
||||
alert( "Hello, Java!".match(/\bJava\b/) ); // Java
|
||||
alert( "Hello, JavaScript!".match(/\bJava\b/) ); // null
|
||||
```
|
||||
|
||||
In the string `subject:Hello, Java!` following positions correspond to `pattern:\b`:
|
||||
|
||||

|
||||
|
||||
So, it matches the pattern `pattern:\bHello\b`, because:
|
||||
|
||||
1. At the beginning of the string matches the first test `pattern:\b`.
|
||||
2. Then matches the word `pattern:Hello`.
|
||||
3. Then the test `pattern:\b` - matches again, as we're between `subject:o` and a space.
|
||||
|
||||
Шаблон `pattern:\bJava\b` также совпадёт. Но не `pattern:\bHell\b` (потому что после `subject:l` нет границы слова), и не `pattern:Java!\b` (восклицательный знак не является "символом слова" `pattern:\w`, поэтому после него нет границы слова).
|
||||
|
||||
```js run
|
||||
alert( "Hello, Java!".match(/\bHello\b/) ); // Hello
|
||||
alert( "Hello, Java!".match(/\bJava\b/) ); // Java
|
||||
alert( "Hello, Java!".match(/\bHell\b/) ); // null (нет совпадения)
|
||||
alert( "Hello, Java!".match(/\bJava!\b/) ); // null (нет совпадения)
|
||||
```
|
||||
|
||||
Так как `pattern:\b` является проверкой, то не добавляет символ после границы к результату.
|
||||
|
||||
Мы можем использовать `pattern:\b` не только со словами, но и с цифрами.
|
||||
|
||||
Например, регулярное выражение `pattern:\b\d\d\b` ищет отдельно стоящие двузначные числа. Другими словами, оно требует, чтобы до и после `pattern:\d\d` был символ, отличный от `pattern:\w` (или начало/конец строки)
|
||||
|
||||
```js run
|
||||
alert( "1 23 456 78".match(/\b\d\d\b/g) ); // 23,78
|
||||
```
|
||||
|
||||
```warn header="Граница слова `pattern:\b` не работает для алфавитов, не основанных на латинице"
|
||||
Проверка границы слова `pattern:\b` проверяет границу, должно быть `pattern:\w` с одной стороны и "не `pattern:\w`" - с другой.
|
||||
|
||||
Но `pattern:\w` означает латинскую букву (или цифру или знак подчёркивания), поэтому проверка не будет работать для других символов (например, кириллицы или иероглифов).
|
||||
```
|
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 6.3 KiB |
Loading…
Add table
Add a link
Reference in a new issue