2013-05-20 2 views
1

Попытка выяснить, как добавить% к числу. Длина номера варьируется, поэтому я не уверен в том, что ... создать реджикс, который принимает любую цифру и добавляет% к ней.Строка формата для размещения% после номера

Я думал об этом, но как бы вы справились с неожиданной длиной?

"\\%d{DigitlegnthVariesHere}" 

или что-то так просто, как "\\%d"

+0

' "\\% D +"'? ---- – 11684

+0

сообщение об ошибке, я имел в виду «после» значение. Простите за это. – PositiveGuy

ответ

9

Вот как поставить % после каждого (всего) числа в строки (редактирования: см дробные числа ниже):

//        In the "search for" regular expression: 
//    +--------------- \d means "any digit" 
//    | +------------- + means "one or more of the previous thing" 
//    | | +----------- The 'g' flag means "globally" in the string 
//    | | |   -------------------------- 
//    | | |   In the replacement string: 
//    | | | +------- $& means "the text that matched" 
//    | | | | +----- % isn't special here, it's just a literal % sign 
//    | | | | | 
//    V V V V V 
s = s.replace(/\d+/g, "$&%"); 

Пример:

var s = "testing 123 testing 456"; 
s = s.replace(/\d+/g, "$&%"); 
console.log(s); // "testing 123% testing 456%" 

В комментариях ниже, вы сказали:

проблема, если вы вводите десятичную как 47,56, это будет выход 45% 56%

Совершенно верно, потому что \d просто для цифр это не магически включает ..

Для обработки дробных чисел требует несколько более сложное выражение:

//         In the "search for" regular expression: 
//    +--------------------- \d means "any digit" 
//    | +------------------- + means "one or more of the previous thing" 
//    | |+------------------ (?:....) is a non-capturing group (more below) 
//    | || +--------------- \. is a literal "." 
//    | || | +------------- \d means "any digit" again 
//    | || | | +--------- ? means "zero or one of the previous thing," 
//    | || | | |   which in this case is the non-capturing group 
//    | || | | |   containing (or not) the dot plus more digits 
//    | || | | | +------- The 'g' flag means "globally" in the string 
//    | || | | | |  -------------------------- 
//    | || | | | |  In the replacement string: 
//    | || | | | | +--- $& means "the text that matched" 
//    | || | | | | | +- % isn't special here, it's just a literal % sign 
//    | || | | | | | | 
//    V VV V V V V V V 
s = s.replace(/\d+(?:\.\d+)?/g, "$&%"); 

Так в основном то, что говорит это: матч серии цифр необязательно с последующей десятичной точкой и более цифр, и заменить их совпадающие символы плюс %.

Пример:

var s = "testing 123.67 testing 456. And then..."; 
s = s.replace(/\d+(?:\.\d+)?/g, "$&%"); 
console.log(s); // "testing 123.67% testing 456%. And then..." 

Обратите внимание, что даже несмотря на то, 456 последовал ., потому что у него не было больше цифр, сразу после него, мы не ненадо добавить % после ..

В какой-то момент ваш вопрос сказал «перед» номер, а не после. Если вы действительно хотели его в перед числа, просто переместить % до того, как $&:

str = str.replace(/\d+/g, "%$&"); 
+2

, чтобы объяснить, '+' означает «один или несколько предыдущих». он немного более ограничительный, чем '*', что означает «ноль или более предыдущего». – sgroves

+0

Цитата: 'append '%' IN FRONT OF number' (capitals mine). Хороший ответ. (И я знаю, что «добавить в фронт» технически некорректно.) – 11684

+2

@ 11684 это так, но большинство людей говорят «preend» – sgroves

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