Вот как поставить %
после каждого (всего) числа в строки (редактирования: см дробные числа ниже):
// 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, "%$&");
' "\\% D +"'? ---- – 11684
сообщение об ошибке, я имел в виду «после» значение. Простите за это. – PositiveGuy