Используйте регулярное выражение в Javascript, чтобы получить центы

#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.