2015-11-16 4 views
5

У нас есть сценарий JS, где мы оцениваем вычисления, но у нас есть проблема с ведущими нулями. JS обрабатывает числа с ведущими нулями как восьмеричные числа. Таким образом, мы использовали регулярное выражение, чтобы удалить все ведущие нули:Пользовательские границы слова Regex в JavaScript

\b0+(\d+)\b 

Образец данных:

102 
1,03 
1.03 
004 
05 
06+07 
08/09 
010,10,01 
00,01 
0001 
01*01 
010,0 
0,0000001 
5/0 

(также в Интернете на https://regex101.com/r/mL3jS8/2)

Регулярное выражение работает нормально, но не с номерами, включая», ' или '.'. Это рассматривается как граница слова, и нули также удаляются.

Мы нашли решение, используя отрицательные lookbehinds/lookforwards, но JS не поддерживает это.

Больно, наше регулярное выражение знания здесь заканчивается :(и Google не любит нас

Любой, кто может помочь нам

+0

Как вы думаете, что это работает для вас? https://regex101.com/r/mL3jS8/2. Я установил глобальный флаг, а также удаляю любой ведущий нуль или запятую. Вы также можете указать точку в спине, если хотите –

+0

@MerianosNikos. Это не тот же результат? –

ответ

4

Если я правильно вас понял, должно работать:.?

/(^|[^\d,.])0+(\d+)\b/ 

Заменить матч с $1$2

Объяснение:.

(  # Match and capture in group 1: 
^  # Either the start-of-string anchor (in case the string starts with 0) 
|  # or 
[^\d,.] # any character except ASCII digits, dots or commas. 
)  # End of group 1. 
0+  # Match one or more leading zeroes 
(\d+) # Match the number and capture it in group 2 
\b  # Match the end of the number (a dot or comma could follow here) 

Протестируйте его live on regex101.com.

+0

Thx для решения !! –

0

Если я понял вы хотите, это мое решение:

var txt001 = "102".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt002 = "1,03".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt003 = "1.03".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt004 = "004".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt005 = "05".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt006 = "06+07".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt007 = "08/09".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt008 = "010,10,01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt009 = "00,01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt010 = "0001".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt011 = "01*01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt012 = "010,0".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt013 = "0,0000001".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt014 = "5/0".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 

И результат

102 
1,03 
1.03 
4 
5 
6+7 
8/9 
10,10,01 
0,01 
1 
1*1 
10,0 
0,0000001 
5/0 
Смежные вопросы