#javascript #regex
#javascript #регулярное выражение
Вопрос:
Я пытаюсь сформулировать выражение регулярного выражения в JavaScript, чтобы получить центы в виде числа с десятичной точкой. Например, выражение, которое можно получить 27
из 454.2700000
. Я знаю, как это сделать с помощью разделения и подстроки, но есть ли более простой способ, используя только регулярное выражение. Спасибо
Комментарии:
1. Я не уверен на 100%, но я думаю, что регулярное выражение медленнее, чем подстрока и так далее. По крайней мере, в PHP регулярное выражение работает медленнее, чем строковые функции.
2.
'12.24'.split('.')[1]
кажется вполне адекватным.3. это не учитывает следующие нули, которые у меня были в моем примере
4. Почему бы просто не использовать
Math.round((x % 1) * 100)
?
Ответ №1:
Следующее анализирует две цифры после десятичной точки:
/.(d{2})/
.
означает точкуd
означает цифру{2}
означает два из них()
чтобы зафиксировать эту часть соответствия
Чтобы получить совпадение, используйте .exec
и [1]
:
/.(d{2})/.exec("454.2700000")[1]; // "27"
Ответ №2:
Если у вас действительно есть число, и вам нужно число, зачем использовать строки?
var n=454.27;
var cents=Math.round(n*100)%100;
Если n — числовая строка, умножение преобразует ее в число:
var n= '454.270000';
var cents=Math.round(n*100)%100;
Ответ №3:
Следующее регулярное выражение вернет вам то, что вы хотите:
/(?:.)(dd)/.exec(454.2700000)[1]
Комментарии:
1. Группа без захвата не нужна.
Ответ №4:
Вы могли бы выполнить тест регулярного выражения
/.(d )$/.test(454.2700000)
и получите свои центы здесь, parseInt(RegExp.$1, 10)
. Разбор целого числа удаляет нули.
Или, если вам всегда нужны два знака после запятой, замените мой d на d {2} pimvbd, а затем вы можете просто использовать RegExp.$ 1 без parseInt.
Вы можете увидеть это здесь http://jsfiddle.net/nickyt/qbsfY
Комментарии:
1. Это соответствует. Я тестировал это в консоли JS Chrome, если только он сначала не извлекает это число из строки.
2. Упс. Извините, я неправильно истолковал ваше регулярное выражение. Но я все еще не вижу, как
parseInt(2700000, 10)
вернется27
.3. @Tim Pietzcker: Я полагаю, что число анализируется заранее, и при преобразовании в строку нули уже исчезли.
4. @Tim — теперь, когда вы упомянули об этом, синтаксический анализ не имеет смысла, но по какой-то причине он возвращает 27, а не 270000.