powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Регулярные выражения - казалось просто....
8 сообщений из 8, страница 1 из 1
Регулярные выражения - казалось просто....
    #36169379
Фотография iConst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зравствуйте, Все.

Не силен в регулярных выражениях, но думал - уж это одолею.

Есть строки содержащие номера машин и прицепов, юзверь пишет как хочет, например:
Авто:
абв754 78
754абв 78
754 абв 78
754абв78
а754бв78
754 78 абв
....
Прицеп:
мм3498 78
3498мм 78
И т.д - примерно те же вариации
.....

И вот мне нужно отловить это и привести к виду "а 754 бв 78". Заткнудся на парсинге цифр: как отловить только 2 цифры (регион) или номер машины (3 цифры). Простейший шаблон \d{2} выдает 75,78 (авто) и 34,78 (прицеп).

Буду благодарен за помощь.

Перевернув мир - оглянись, может перевернулся ты сам?!
...
Рейтинг: 0 / 0
Регулярные выражения - казалось просто....
    #36169399
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
var s = 'абв754 78'; // исходная строка
var nums = s.replace(/\D/g,''), smb = s.replace(/[^а-яё]/g,'');
var reslt = smb.substr( 0 , 1 ) + ' ' + nums.substr( 0 , 3 ) + ' ' + smb.substr( 1 ) + ' ' + nums.substr( 3 ); // результат
...
Рейтинг: 0 / 0
Регулярные выражения - казалось просто....
    #36169497
Фотография iConst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч
Код: plaintext
1.
2.
3.
var s = 'абв754 78'; // исходная строка
var nums = s.replace(/\D/g,''), smb = s.replace(/[^а-яё]/g,'');
var reslt = smb.substr( 0 , 1 ) + ' ' + nums.substr( 0 , 3 ) + ' ' + smb.substr( 1 ) + ' ' + nums.substr( 3 ); // результат

Спасибо за подсказку. Видимо, придется плотнее заняться регулярными выражениями.
Я думал ловить из строки значения наборами паттернов и вычислять совпадения:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var region = source_string.match(/two_digits_pattern/g);
var tree_dig = source_string.match(/three_digits_pattern/g);
var four_dig = source_string.match(/four_digits_pattern/g);
var two_letters = source_string.match(/two_letters_pattern/g);
var tree_letters = source_string.match(/three_letters_pattern/g);

if(two_letters.length ==  2  && four_dig.length ==  4  && region.length ==  2 )
{
   // to do thms
}
//... etc.

Ваш вариант неплохо работает, спасибо, но спотыкается на правильном написании номера автомобиля, т .е который нужен.

И вторая проблема, что прицепы и авто все в одной куче :)).
...
Рейтинг: 0 / 0
Регулярные выражения - казалось просто....
    #36169501
Фотография iConst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просмотрел множество примеров, но даже приблизительно к моей задаче не нашел. Как точно выцепить, например, две цифры из строки, но не трогать трех и более цифровые последовательности? Говорят, рег. выраженя все могут :).
Перевернув мир - оглянись, может перевернулся ты сам?!
...
Рейтинг: 0 / 0
Регулярные выражения - казалось просто....
    #36169602
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй не шаблон типа \d{2}, а \d{2,2} - в этом случае 78 будет браться, а 754 - нет.
...
Рейтинг: 0 / 0
Регулярные выражения - казалось просто....
    #36169616
Фотография iConst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckИспользуй не шаблон типа \d{2}, а \d{2,2} - в этом случае 78 будет браться, а 754 - нет.
А Вы проверяли сами свой совет?

Код: plaintext
alert("34 2 р5870 ап 76а8 ".match(/\d{ 2 , 2 }/g)); //  34 , 58 , 70 , 76 
...
Рейтинг: 0 / 0
Регулярные выражения - казалось просто....
    #36169699
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iConstВаш вариант неплохо работает, спасибо, но спотыкается на правильном написании номера автомобиля, т .е который нужен.Проверьте
Код: plaintext
1.
var s = 'a 754 бв 78'; // исходная строка
...
iConstИ вторая проблема, что прицепы и авто все в одной куче :)).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var nums = s.replace(/\D/g,''), smb = s.replace(/[^а-яё]/g,'');
var reslt = null;
if((nums.length ==  5 )&&(smb.length ==  3 )) {
	// авто
	reslt = smb.substr( 0 , 1 ) + ' ' + nums.substr( 0 , 3 ) + ' ' + smb.substr( 1 ) + ' ' + nums.substr( 3 );
} 
if((nums.length ==  6 )&&(smb.length ==  2 )) {
	// прицеп
	reslt = smb + ' ' + nums.substr( 0 , 4 ) + ' ' + nums.substr( 4 );
}
...
Рейтинг: 0 / 0
Регулярные выражения - казалось просто....
    #36169793
Фотография iConst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var nums = s.replace(/\D/g,''), smb = s.replace(/[^а-яё]/g,'');
var reslt = null;
if((nums.length ==  5 )&&(smb.length ==  3 )) {
	// авто
	reslt = smb.substr( 0 , 1 ) + ' ' + nums.substr( 0 , 3 ) + ' ' + smb.substr( 1 ) + ' ' + nums.substr( 3 );
} 
if((nums.length ==  6 )&&(smb.length ==  2 )) {
	// прицеп
	reslt = smb + ' ' + nums.substr( 0 , 4 ) + ' ' + nums.substr( 4 );
}

Насчет "спотыкается" - беру слова обратно ... латинскую "a" впечатал...
Спасибо. Все шикарно. А главное - достаточно изящно. По ходу выяснилось, что уже трехзначные регионы появились... Добавить условие не составило труда.

Еще раз спасибо за подсказку, а точнее - решение.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Регулярные выражения - казалось просто....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]