Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.10.2014, 06:42
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

После new RegExp null, а без new RegExp array
Один паттерн. Один скопипастен в аргумент RegExp, второй компилится по синтаксису.

var d = '11-apr-1961';

var re = new RegExp('^(\d{1,2})(\/|-)([a-zA-Z]{3})(\/|-)(\d{4})$');

var rx = /^(\d{1,2})(\/|-)([a-zA-Z]{3})(\/|-)(\d{4})$/;

d.match(re);
/*
null
*/
d.match(rx);
/*
11-apr-1961,11,-,apr,-,1961
*/


В чем тут секрет?
Ответить с цитированием
  #2 (permalink)  
Старый 24.10.2014, 06:45
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Упс, день космонавтики 12 апреля, надо ж, забыл.

Сразу второй вопрос задам. Как переделать среднюю часть которая отвечает за месяц, чтобы она ловила не только текст, но и число месяца (1-12). При этом текст будет русский, а длина текста от 3 до полного названия месяца.

И еще, оказывается в регах пробел как пробел имеет значение. А какой символ с экраном его заменяет конкретно? Чтобы не спейс передавать, а конкретную букву. Потому что мне надо будет заменить / на пробел, а пробелы сами знаете, вещь неустойчивая.

Последний раз редактировалось kostyanet, 24.10.2014 в 06:50.
Ответить с цитированием
  #3 (permalink)  
Старый 24.10.2014, 06:55
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

kostyanet, дело в том, что в RegExp нужно экранизировать служебные символы в двойне, так как мы передаём строку, а в строке, как привило, все обратные слэшы служат для экранизации, например, тех же кавычек.

var re = new RegExp('^(\\d{1,2})(\\/|-)([a-zA-Z]{3})(\\/|-)(\\d{4})$');


Сообщение от kostyanet
А какой символ с экраном его заменяет конкретно?
\s

Последний раз редактировалось ruslan_mart, 24.10.2014 в 06:58.
Ответить с цитированием
  #4 (permalink)  
Старый 24.10.2014, 07:13
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Ага, спасибо, я уже нашел и вспомнил что напарывался на этот сук. На лбу бы вытатуировал, но экран у меня не блестящий, не вижу себя. Начинаю в срач-паде проводить эксперименты и забываю что надо же саму строку оформить. Через атрибут pattern все передается слава богу как есть.

Насчет \s - это не только space, это вообще все что на него похоже. Табы, переносы (кажется) и прочая хрень.

С пробелом проблема визуального характера. У него ширина зависит от шрифта, два пробела могут выглядеть как один, или ни одного как пробел. Хотелось такой конкретный символ, чтобы пробел было видно, может там код его ввести?

Последний раз редактировалось kostyanet, 24.10.2014 в 07:15.
Ответить с цитированием
  #5 (permalink)  
Старый 24.10.2014, 07:24
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

В общем на русский от 3 до 7 сделал, а как числа для месяца туда добавить?

var d = '12 апреля 1961';


var rx = /^(\d{1,2})( |-)([а-яА-Я]{3,7})( |-)(\d{4})$/;

d.match(rx);


/*
12 апреля 1961,12, ,апреля, ,1961
*/


Кажется вот так

Код:
var rx = /^(\d{1,2})( |-)([а-яА-Я0-9]{2,7})( |-)(\d{4})$/;
но пришлось уменьшить минимум, то есть можно написать теперь 12 ап 1967

Вот что делает \s

var d = '12\tян 1961';


var rx = /^(\d{1,2})(\s)([а-яА-Я0-9]{2,7})(\s)(\d{4})$/;

d.match(rx);


/*
12	ян 1961,12,	,ян, ,1961
*/

Последний раз редактировалось kostyanet, 24.10.2014 в 07:29.
Ответить с цитированием
  #6 (permalink)  
Старый 24.10.2014, 08:20
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
два пробела могут выглядеть как один
/ {2}/
Сразу видно что пробела два )
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 24.10.2014, 08:54
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Да х с ними, пусть табуляторы с переносами пишут, все равно дата валится одним длинным числом, ради которого ее бле надо распознать, а сперва проверит.
Ответить с цитированием
  #8 (permalink)  
Старый 24.10.2014, 09:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

kostyanet,

d.split(/\s+/)
Ответить с цитированием
  #9 (permalink)  
Старый 24.10.2014, 09:40
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от terminator-101
 
Регистрация: 14.10.2014
Сообщений: 117

Сообщение от kostyanet
Хотелось такой конкретный символ, чтобы пробел было видно, может там код его ввести?
Я че то не знаю про такой. По идее, можно вот так /foo[ ]bar/
, я думаю. Или вот так /foo(?: )bar/
Ответить с цитированием
  #10 (permalink)  
Старый 25.10.2014, 04:01
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Фиг с ними с пробелами, я просто один раз их выкосил, подумал нафиг нужны, это ж выражение ж, и все поломалось, пришлось вбивать.

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

$pat = '^(0[1-9]|[12][0-9]|3[01])[- .](0[1-9]|1[012]|янв|фев|мар|апр|мая|июн|июл|авг|сен|окт|ноя|дек)[- .](19|20)\d\d$';


Как сделать чтобы совпадало по началу названия, ну как в функции php strncmp(str1,str2,n) - где n количество символов от начала.

То есть рега матчит дату 12 янв 1987, а 12 января 1987 не матчит. Помогите regex-идиоту.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хелп.Как получить ссылку без обрезания после & djdevil Общие вопросы Javascript 4 22.07.2014 13:48
Вывести изображение после ввода URL без перезагрузки страницы Delfiniys Элементы интерфейса 5 18.10.2013 11:41
array merge без замещения bugmenot Общие вопросы Javascript 7 15.11.2011 20:34
Удалить ряд символов перед или после курсора до определенного сивола brd Javascript под браузер 3 30.10.2009 08:20
evalScripts без regexp и eval Diem Events/DOM/Window 1 30.07.2009 17:34