2012-06-27 3 views
2

Использование MooTools У меня есть регулярное выражение, как это:Javascript настройка регулярных выражений

new RegExp('^([^\\D'+ separator +']+)(\\d{2})'); 

В строке вставляет символ, определенный в сепараторе после каждых 2-х символов. Я хочу, чтобы он вставлялся только для последних двух.

Пример:

String  Result 
123456  12.34.56 // what it does now 
123456  1234.56 // what it should do 

У меня нет большого опыта работы с регулярным выражением, так что любая помощь или ссылка на приличный учебник ценится.

+0

Почему regex .....? – gdoron

+0

Что делать, если строка длиной всего две цифры? Должен ли он еще добавить период? –

+0

(предположим, что делать это с регулярным выражением далеко не оптимально) попробуйте добавить окончательный '$': 'новый RegExp ('([^ \\ D' + separator + '] +) (\\ d {2}) $ '); ' – fcalderan

ответ

1

Не следует использовать регулярное выражение для этого:

var str = "123456".split('').reverse().join(''); 
var x = str.substring(0,2) + '.' + str.substring(2); 
var final = x.split('').reverse().join(''); 

console.log(final); 

Live DEMO

Конечно, вы можете проверить, если длина строки больше, чем 2

if (str.length > 2) 
    // ... 

Или используйте строку slice функция:

str ="123456"; 
str.slice(0, -2) + "." + str.slice(-2); 

Как это работает? я разобью его на куски:

// Start at the beginning of the string grab all the chars 
// and stop two chars before the end of the string 
str.slice(0, -2) 

// Start at two chars before the end of the string, take all the chars until 
// the end of the string. 
str.slice(-2); 
+0

Вы можете подстроить отрицательное число. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substr – nhahtdh

+0

Thx. Простота побеждает :-) Я использовал библиотеку (также используемую для маскировки других полей в другом месте), но в этом случае просто = лучше. – Lennart

+0

str = str.substr (0, (str.length-2)) + ',' + str.substr (-2); работает более элегантно, но спасибо за то, что меня направили в правильном направлении :-) – Lennart

2

Если строка состоит только из цифр, не является ли это то же самое, как разделить на 100?

'' + str/100 

Это может зависеть от региона, хотя ;-)

я могу улучшить этот ответ, если у вас есть больше случаев края я могу работать.


Если вы абсолютно необходимо только регулярные выражения, вы всегда можете использовать это:

'123456'.replace(/(.)(\d{2})$/, function($0, $1, $2) { 
    return $1 + '.' + $2; 
}); 

Это защитит вас от строк, которые бы в противном случае привести к NaN, например 'foo'.

+0

почему '' '+ str' вместо 'parseInt (str)'? – poncha

+0

@poncha Я предполагал, что он хочет строку в результате –

+0

имеет смысл;) +1 – poncha

0

Предположим, что строка всегда имеет более 2-х символов:

str.slice(0, -2) + "." + str.slice(-2) 

Ссылка на String.slice.

Смежные вопросы