2014-12-11 4 views
0

Я пытаюсь обрезать некоторые долготные координаты без каких-либо проблем округления. Я думал, что replace() будет самым простым способом сделать это.Javascript Replace with Regex Match Не работает

Мое регулярное выражение правильно, но я, видимо, не использую замену правильно.

Вот мой урезанный пример. Мне нужно, чтобы лишить все десятичные точки после 8-е места

var truncRegex = /-?\d+?\.\d{8}/; 
console.log('-81.82297519999997'.replace(truncRegex, '$1')); 

То, что происходит заменить() лишает матч и оставив меня с остатком префикса «$ 1». Результат: $ 1999997

+1

toFixed Если вы не обеспокоены округления, вы можете использовать 'Number ("..."). (8)' – chazsolo

ответ

1

У вас есть некоторые ответы RegExp. В качестве альтернативы вы можете просто найти индекс точки и получить подстроку, если вам не нужно округлять.

var str = '-81.82297519999997'; 
var truncated = str.substring(0, str.indexOf('.') + 9); // this will give you 8 fractions 
console.log(truncated); // "-81.82297519" 
+0

Это было мое исправление. Спасибо. –

0

Вы должны добавить matching groups в круглые скобки, чтобы найти то, что вы можете называть с помощью $1 при замене. Например:

var truncRegex = /(-?\d+?\.\d{8})\d*/; 
console.log('-81.82297519999997'.replace(truncRegex, '$1')); 

replace() функция заменяет все, что матчи на основе регулярных выражений. Ваш код просто заменяет -DD.DDDDDDDD строкой '$ 1'.

Вы можете использовать выражение лица, но Вы должны будете использовать match, не replace, например .:

var truncRegex = /-?\d+?\.\d{8}/; 
console.log('-81.82297519999997'.match(truncRegex)[0]); 
0
var s = '81.82297519999997'; 

// Returns "-81.82297519" 
s.replace(/(-?\d+\.\d{8})\d*/, '$1'); 
0
(-?\d+?\.\d{8})|.* 

Try this.Replace по $1 .Увидь демо.

https://regex101.com/r/eZ0yP4/17

var re = /(-?\d+?\.\d{8})|.*/mg; 
var str = '-81.82297519999997'; 
var subst = '$1'; 

var result = str.replace(re, subst);