Совпадение с использованием первой части регулярного выражения, если существует десятичная дробь, и второй части, если ее нет - PullRequest
1 голос
/ 06 февраля 2020

Я пытаюсь сопоставить начальные нули строки, чтобы заменить на пустую строку. У меня может быть сценарий с ведущими нулями, например десятичная дробь: 0000000.005 или без: 000000000005.

Я придумал: /.+?(?=0\.)|.+?(?=[0-9]+)/.

Первая часть соответствует всем лидирующим нулям до тех пор, пока я не достигну паттерна 0. (т.е. 0000000.005 становится 0.005). Вторая часть применяет тот же ленивый подход с положительным прогнозом к начальным нулям без десятичной дроби (т. Е. 000000000005 становится 5).

Поскольку вторая часть (.+?(?=[0-9]+)) сильнее первой, она всегда превратит 0000000.005 в 5. Есть ли способ в одном выражении сопоставить только первый раздел, если есть, скажем, наличие десятичного числа, и использовать другое выражение, если нет?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Если вам нужно решение для регулярных выражений, вы можете использовать

s.replace(/^0+(?=0\.|[1-9])/, '')

См. Демонстрационную версию регулярных выражений .

Подробно

  • ^ - начало строки
  • 0+ - 1+ нулей
  • (?=0\.|[1-9]) - следующие символы должны быть 0. или ди git от 1 до 9.

JS демо:

var strs = ['000000000005', '0000000.005'];
for (var s of strs) {
  console.log(s, '=>', s.replace(/^0+(?=0\.|[1-9])/, ''));
  console.log(s, '=>', Number(s)); // Non-regex way
}
0 голосов
/ 06 февраля 2020

Вы можете использовать функцию replace() в регулярных выражениях.
Вот демонстрационный код.

var str = "00000000.00005";
var str1 = "0000000005";
if(str.includes(".")) //case 1
{
	str = str.replace(/0+\./g, '0.');
console.log("str ==>", str);
}
if(!str1.includes("."))//case 2 . 
{ 
		str1 = str1.replace(/0+\.|0+/g, '');
console.log("str 1 ===>", str1);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...