|
64 / 64 / 20
Регистрация: 16.07.2012
Сообщений: 147
|
|||||||||||
Метасимвол в регулярных выражениях18.07.2012, 00:56. Показов 2730. Ответов 8
Метки нет (Все метки)
Символ "." означает любой символ кроме перевода на новую строку. А символ "\." непосредственно саму ".". Но не пойму по описанию автора в чем разница между двумя кусками
0
|
|||||||||||
| 18.07.2012, 00:56 | |
|
Ответы с готовыми решениями:
8
Значение $1 в регулярных выражениях
|
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
|
| 18.07.2012, 02:14 | |
|
В первом случае (первый синтаксис), когда шаблон ограничен двумя прямыми слешами, он запоминается "как есть" (AS IS), причём запоминается в момент загрузки скрипта.
Во втором случае (второй синтаксис), когда шаблон прописан в кавычках, он компилируется (сиречь вычисляется) перед выполнением. И компилируется шаблон посимвольно, путём первоначальной разбивки строки на отдельные символы и затем происходит конкатенация (символы сливаются в одну строку). Т.е. "внутри" браузера строка "abcd" преобразуется в "a"+"b"+"c"+"d", которая затем превращается во внутреннее значение abcd Одинарный символ обратного слеша при компиляции переменной типа String рассматривается браузером ВСЕГДА как экранирование следующего символа. Т.е. запись типа "a"+"\" в результате будет преобразована в a + "КАВЫЧКА и НЕТ закрывающей кавычки (что даст ошибку синтаксиса). Правильной будет запись "a"+"\\", что даст a\
0
|
|
|
64 / 64 / 20
Регистрация: 16.07.2012
Сообщений: 147
|
|
| 18.07.2012, 02:47 [ТС] | |
|
За объяснение по компиляции спасибо.
Но вот как раз слеша в дате быть и не должно. Т.е. проблема в не том, что "\"" будет интерпретировано как """. С точки синтаксиса в примерах все правильно. Только непонятно зачем вместо "\." идет "\\.", вместо "\d" идет "\\d" и т.д.
0
|
|
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
|
| 18.07.2012, 14:07 | |
|
polyaKIDze, перечитываем написанное выше ЕЩЁ РАЗ.
Но внимательно, пытаясь понять. Нужный вам шаблон - это ^[0-3]\d\.[01]\d\.[12][09]\d\d$ При использовании синтаксиса №1 вы его просто прописываете внутри двух прямых слешев, вот так: /^[0-3]\d\.[01]\d\.[12][09]\d\d$/ При использовании синтаксиса №2 вам надо из какой-то строки получить "какая-то строка" >>> ^[0-3]\d\.[01]\d\.[12][09]\d\d$ Эта самая какая-то строка будет компилироваться, т.е. исполняться посимвольно, а потом сливаться в одну. Положим, захотели вы его записать ТАКИМ ЖЕ ОБРАЗОМ, как и для синтаксиса №1, но не в прямых слешах, а в кавычках. Вот так: "^[0-3]\d\.[01]\d\.[12][09]\d\d$" Начинаем разбивать на отдельные символы, компилировать их и сливать в одну строку: "^" >>> это ^, т.е. то, что нам и надо первым символом "[" >>> [, итого при слиянии ^[ "0" >>> 0, итого ^[0 "-" >>> -, итого ^[0- "3" >>> 3, итого ^[0-3 "]" >>> ], итого ^[0-3] "\" >>> Стоп-машина. В переменной типа String браузер ВСЕГДА воспринимает обратный слеш как экранирование следующего символа. Поэтому браузер автоматически возьмёт ещё один символ, следующий за обратным слешем. Вот так: "\d" >>> d, итого ^[0-3]d. Ещё раз - стоп-машина. Нужный шаблон НЕ ПОЛУЧАЕТСЯ. Нам нужно получить обратный слеш и только потом символ d, а обратного слеша в итоговом шаблоне НЕТ. Чтобы получить обратный слеш, его надо "заэкранировать" тем же обратным слешем. Вот так: "\\" >>> \, итого ^[0-3]\ Что ещё непонятно??? Что в моём предыдущем сообщении было написано НЕ ТАК, что вы ничегошеньки не поняли?
3
|
|
|
64 / 64 / 20
Регистрация: 16.07.2012
Сообщений: 147
|
|
| 18.07.2012, 14:14 [ТС] | |
|
Согласен. Затупил. Все так было написано. В свою защиту могу сказать, что вопрос возник ночью после суток чтения учебника. С "утра" в ответах читается совсем другое)
0
|
|
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
|||||||||||
| 18.07.2012, 14:38 | |||||||||||
|
polyaKIDze, добавлю, что эта самая "какая-то строка" изначально может быть составной и содержать какие-то переменные.
Например, для вашего шаблона:
Запустите следующий код, например, в FireFox:
А теперь запустите этот же код в браузере MSIE. И в нём прочитаете true. Это, кстати, самый простой способ определения браузера Explorer.
0
|
|||||||||||
|
64 / 64 / 20
Регистрация: 16.07.2012
Сообщений: 147
|
|
| 19.07.2012, 00:05 [ТС] | |
|
Спасибо. Очень полезная информация. Книга, которую я читаю, сжата, т.к. в ней описаны и остальные средства web-мастера. К сожалению нет времени читать про каждый язык в подробностях.
А последним примером хотите сказать, что IE считает "v" и вертикальную табуляцию одним и тем же? Или они как-то по-другому понимают '\v'? Проверить не могу, т.к. IE отключен. Добавлено через 20 минут Не читайте 2 строчки выше. Я сформулировал нормально вопрос: А эквивалентны ли строки записанные " " и ' '? Как вы писали строка, записанная через " ", будет компилироваться. Но если так же компилируется и строка, полученная с помощью ' ', то '\v' действительно распознается как v. Тогда где неправ IE?
0
|
|
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
|
| 19.07.2012, 00:32 | |
|
polyaKIDze, в JS кавычки одинарные и двойные по своему действию никак не различаются (в отличие, например, от PHP).
Можете проверить не только метасимвол. Можно - любой символ. Например, alert ('a' == '\a') также даст в MSIE результат true В "нормальных" браузерах при сравнении, вероятно, задействован и механизм сравнения длины строковых переменных. Потому в результате и выдаёт false
0
|
|
|
64 / 64 / 20
Регистрация: 16.07.2012
Сообщений: 147
|
|
| 19.07.2012, 00:43 [ТС] | |
|
Исчерпывающе. Еще раз спасибо.
0
|
|
| 19.07.2012, 00:43 | |
|
Помогаю со студенческими работами здесь
9
Знак фопроса в регулярных выражениях Отрицание в Регулярных выражениях
Кириллица в регулярных выражениях Синтаксис в регулярных выражениях Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|