2016-11-26 3 views
1

Ok так что я следующая строка,Заменить число в строке

var str = 'some text {Foo} some more text {9}'; 

Теперь я знаю, как заменить определенные символы/слова, как,

var newStr = str.replace(/{Foo}/g, 'bar'); 

Но как бы я заменить, что { 9}, когда число может быть любым числом?

+6

'NewStr = str.replace (/ {\ d +}/г, 'что-то');' – anubhava

+1

[Специальные символы значение в регулярных выражениях] (https: //developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp # Special_characters_meaning_in_regular_expressions) – Andreas

+1

@anubhava спасибо :) – VilleKoo

ответ

4

Вы можете использовать мета-последовательность для цифры \d.

var str = 'some text {Foo} some more text {9}', 
 
    newStr = str.replace(/{\d+}/g, 'bar'); 
 

 
console.log(newStr);

+1

Спасибо! Это именно то, что я искал :) – VilleKoo

1

Вы должны использовать \{/d+}/g регулярное выражение, чтобы соответствовать любому номеру:

  • \d метасимвол соответствует цифре
  • + квантора означает 1 или более согласованный типа
  • /g модифицирующие средства Выполняет глобальный матч

var str = 'some text {Foo} some more text {9}'; 
 
var newstr = str.replace(/{\d+}/g, 'number'); 
 
console.log(newstr); 
 
str = 'some text {Foo} some more text {99199} and {435}'; 
 
newstr = str.replace(/\d+/g, 'number'); 
 
console.log(newstr);

Кстати, я использовал this tool, чтобы проверить мое регулярное выражение, подумал, что это может пригодиться, если вы хотите попробовать более регулярные выражения.

1

Вы не указали, что такое «число», поэтому я разработал решение, которое работает не только для целых положительных чисел, но также для целых и целых чисел со знаком и заботится о вложенных круглых скобках.

/{\d+}/g соответствует одному или более цифр в фигурные скобки

var str = 'some text {Foo} some more text {9}'; 
 

 
var m = str.match(/{\d+}/g); 
 
console.log(m); // m = [ "{9}" ]

Но выше шаблон не соответствует поплавки, например, {3.14}

str = 'some text {Foo} some more text {9} and {3.14}'; 
 

 
m = str.match(/{\d+}/g); 
 
console.log(m); // m = [ "{9}" ]

А насчет двойных круглых скобок они в порядке?

str = 'some text {Foo} some more text {9} and {3.14} and {{8}}'; 
 
m = str.match(/{\d+}/g); 
 
console.log(m); // m = [ "{9}", "{8}" ]

Вы можете использовать это, чтобы соответствовать поплавки

str = 'some text {Foo} some more text {9} and {3.14} and {{8}}'; 
 
m = str.match(/{(\-|\+)?(\d+(\.\d+)?)}/g); 
 
console.log(m); // m = [ "{9}", "{3.14}", "{8}" ]

Так вот решение, позволяющее вложенные фигурные скобки

str = 'some text {Foo} some more text {9} and {3.14} and {{8}}'; 
 
var newStr = str.replace(/{(\-|\+)?(\d+(\.\d+)?)}/g, '{NUMBER}'); 
 
console.log(newStr);

Заботясь вложенных скобок

матча все между фигурными скобками и проверить для числовых значений (регулярное выражение из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat)

str = 'some text {Foo} some more text {9} and {3.14} and {{8}}'; 
 
m = str.match(/{.+?}/g); 
 
console.log(m); // m = [ "{Foo}", "{9}", "{3.14}", "{{8}" ] 
 
for (var i = 0; i < m.length; i++) { 
 
    mi = m[i]; 
 
    value = mi.slice(1, mi.length - 1); 
 
    // regular expression for parsing floats from: 
 
    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat 
 
    if (/^(\-|\+)?([0-9]+(\.[0-9]+)?)$/ 
 
    .test(value)) { 
 
    console.log("matches a number: ", value); 
 
    } 
 
};

Напишите функция для замены числовых значений только

function replaceNumber(string, repl) { 
 
    return string.replace(/{.+?}/g, function(match) { 
 
    value = match.slice(1, match.length - 1); 
 
    if (/^(\-|\+)?([0-9]+(\.[0-9]+)?)$/ 
 
     .test(value)) { 
 
     return '{' + repl + '}'; 
 
    } else { 
 
     return match; 
 
    } 
 
    }); 
 
} 
 

 

 
str = 'some text {Foo} some more text {9} and {3.14} and {{8}} and {-2}'; 
 

 
newStr = replaceNumber(str, 'NUMBER'); 
 
console.log(newStr); 
 
// newStr = some text {Foo} some more text {NUMBER} and {NUMBER} and {{8}} and {NUMBER}

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