Regex для форматирования числа в строке с помощью скрипта Google Apps - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь отформатировать числа в строку в следующем формате: #, ##, ### Вот мой код скрипта Google, но он заменяет число на #, ##, ### Строка может иметь любое число символов до и после чисел. Каков наилучший и эффективный способ сделать это?

Строка ввода: «Цена от 100 000 рупий, скидка 10%» или «Цена от 100 000 рупий, скидка 10%» Ожидаемая цена: «Цена от 10000 рупий, скидка 10% "

treated_value3 = treated_value2.replace(/(\d+)/, Utilities.formatString("#,##,##0","$1"));

1 Ответ

1 голос
/ 16 марта 2020

Использование Международный :

const str = "Price starting from Rs.100000",
str2 =  "Price starting from Rs.100,000",
str3 = "Pricing starts at Rs.50000000 and get 20% discount, if you order now!";
[str, str2, str3].forEach(str=>{
    const [,prefix, num, suffix] = str.match(/(.*?Rs\.)([\d,]+)(.*)$/);
    const fNum = new Intl.NumberFormat('en-IN').format(num.replace(/,/g,''));
    console.info(`${prefix}${fNum} ${suffix}`);
})

В качестве альтернативы используйте положительный взгляд с помощью string.replace:

const str = 'Price starting from Rs.100000',
  str2 = 'Price starting from Rs.100,000',
  str3 =
    'Pricing starts at Rs.50000000 and get 20% discount, if you order now!';
[str, str2, str3].forEach(str => {
  const formatted = str.replace(/(?<=Rs\.)[\d,]+/, num => {
    return new Intl.NumberFormat('en-IN').format(num.replace(/,/g, ''));
  });
  console.info(formatted);
});
...