Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение (https://javascript.ru/forum/misc/50853-regulyarnoe-vyrazhenie.html)

Ant_Jhon 14.10.2014 18:33

щас момент, надо уточнить на счет .12 распарсит ли его сервак в дабл

danik.js 14.10.2014 18:47

Цитата:

Сообщение от Ant_Jhon
надо уточнить на счет .12

Дык пох на сервак. Кто числа вбивать будет? Если прогер - то ок. Он так может )
Ну а если тупой юзер или секретутка, то отсутствие целой части - скорее всего ошибка.

Ant_Jhon 14.10.2014 19:36

Итак, сори за паузу:) вообще говоря
double tmpParse = Double.parseDouble((String)".1");
log.info("tmpParse = " + tmpParse);
вот эта хрень неожиданно(для меня) выдала tmpParse = 0.1, тоесть выражения типа .1 и 1. допустимы :\

terminator-101 14.10.2014 19:41

Цитата:

Сообщение от Ant_Jhon
тоесть выражения типа .1 и 1. допустимы :\

Тогда вот так


s="ab<c1.10\n\n>)(*an.11kj5.b10.90f 20c"
re=/(\d+)?\.?\d+\.?|^$/gm
s.match(re)

// [ '1.10', '', '.11', '5.', '10.90', '20' ]

Ant_Jhon 14.10.2014 19:48

терминатор, можешь расписать на русском что означает эта конструкция
/(\d+)?\.?\d+\.?|^$/gm ?:) и как я уже спрашивал очень хочется узнать для чего на конце gm? на сколько смог понять из гугла регЭкспы ставятся внутри /../

Ant_Jhon 14.10.2014 19:49

Млять тоже хочу уметь делать такие штуки /(\d+)?\.?\d+\.?|^$/gm

terminator-101 14.10.2014 19:51

Ant_Jhon,
Мне щас некогда, уходить надо, потом. Пока почитай про регекспы на этом сайте, там есть, по-моему.

Ant_Jhon 14.10.2014 19:52

Хорошо, спасибо всем за помощь:thanks:

danik.js 14.10.2014 20:21

Цитата:

Сообщение от Ant_Jhon
вот эта хрень неожиданно(для меня) выдала tmpParse = 0.1, тоесть выражения типа .1 и 1. допустимы

Ну ты удивишься если скормишь туда числа типа 1e2.
Ты уверен что тебе нужно пропускать такой формат?

Если да, то регулярка тебе нах не нужна.

if (!(input == '' || input == Infinity || isNaN(input))) {

}

terminator-101 15.10.2014 12:39

Ant_Jhon,
Означает следующее
все \d+ означают 1 или более цифровых символов, тут \d -- метасимвол, означающий диапазон 0-9 (эквивалентен [0-9]), он совпадает с любым 1 цифровым символом, а + означает 1 или более вхождений предыдущего символа. Все ? означают 0 или 1 вхождение предыдущего шаблона. а \. означает просто совпадение с точкой (экранирование для того, чтобы отменить интерпретацию точки как метасимвола). Флаг g означает глобальный поиск, значит в строке foofoo /foo/g найдет 2 foo, а /foo/ -- только первое. m -- это флаг многострочного поиска, это значит(конкретно в JS), что символы ^ и $ будут работать со всеми переносами строк, а не только с началом и концом всей строки.

Ну ты наверное знаешь, но на всякий случай, | означает or, а ^$ -- совпадение с пустой строкой, само-сабой

Вот еще что забыл сказать. Если ты работаешь с файлами, в которых виндовские переносы строк, типа \r\n, ты должен эти строки сначала очистить от всех \r, например вот так

s=s.replace(/\r\n/g, "\n")

иначе, у тебя будет парсится больше пустых строк чем на самом деле, примерно вот такая параша:

s="ab<c1.10a\r\n\r\n>)(*an.11kj5.b10.90f 20c"
re=/(\d+)?\.?\d+\.?|^$/gm
//s=s.replace(/\r\n/g, "\n")
s.match(re)

// [ '1.10', '', '', '', '.11', '5.', '10.90', '20' ]


Часовой пояс GMT +3, время: 00:41.