5

Как извлечь число из строки в JavaScript?

13

У меня есть строка в JavaScript (например, #box2), и мне нужно получить только 2 из нее.

Я попробовал следующий код:

var thestring = $(this).attr('href');
var thenum = thestring.replace(/(^.+)(\w\d+\w)(.+$)/i, '$2');
alert(thenum);

Но в alert все еще возвращается #box2. Как мне это исправить?

Важно, чтобы это решение работало с любым числом, которое может быть прикреплено в конце строки.

4 ответ(ов)

8

Ваш вопрос о регулярных выражениях в JavaScript интересен! Давайте разберёмся с вашим примером.

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

var thenum = thestring.replace(/^\D+/g, ''); // Заменяем все ведущие нецифровые символы на пустую строку

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

thenum = "foo3bar5".match(/\d+/)[0]; // Возвращает "3"

Теперь немного о вашем "бонусе" — генераторе регулярных выражений:

function getre(str, num) {
  if (str === num)
    return 'nice try';  // Проверяем, совпадают ли строка и число
  var res = [/^\D+/g, /\D+$/g, /^\D+|\D+$/g, /\D+/g, /\D.*/g, /.*\D/g, /^\D+|\D.*$/g, /.*\D(?=\d)|\D+$/g];
  for (var i = 0; i < res.length; i++)
    if (str.replace(res[i], '') === num)
      return 'num = str.replace(/' + res[i].source + '/g, "")'; // Возвращаем, если замена произошла
  return 'no idea'; // Если не нашли подходящее выражение
};

function update() {
  $ = function(x) { return document.getElementById(x) }; // Упрощаем доступ к элементам
  var re = getre($('str').value, $('num').value); // Получаем регулярное выражение
  $('re').innerHTML = 'Numex speaks: <code>' + re + '</code>'; // Выводим результат
}

HTML часть кода выглядит следующим образом:

<p>Hi, I'm Numex, the Number Extractor Oracle.</p>
<p>What is your string? <input id="str" value="42abc"></p>
<p>What number do you want to extract? <input id="num" value="42"></p>
<p><button onclick="update()">Insert Coin</button></p>
<p id="re"></p>

Вы можете использовать этот код для извлечения цифр из строк и создания регулярных выражений в зависимости от введённых значений. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!

3

Вы можете попробовать следующее:

var txt = "#div-name-1234-characteristic:561613213213";
var numb = txt.match(/\d/g);
numb = numb.join("");
console.log(numb);

Этот код использует регулярное выражение \d, чтобы найти все цифры в строке txt. Затем он объединяет их в одну строку с помощью метода join(""). В результате вы получите строку, содержащую все цифры из исходного текста.

1

Я думаю, что это регулярное выражение подойдет вам:

var num = txt.replace(/[^0-9]/g, '');

Где txt — это ваша строка.

Оно просто удаляет всё, что не является цифрой.

Также, вы можете достичь того же результата, используя вот это:

var num = txt.replace(/\D/g, '');

Оба варианта будут работать для вашей задачи.

0

Вы можете попробовать следующий код: string.replace(/[^0-9]/g, ''); Этот код удаляет все недigit-символы, оставляя только цифры в строке.

Простой пример функции, которая реализует это, может выглядеть так:

function retnum(str) { 
    var num = str.replace(/[^0-9]/g, ''); 
    return parseInt(num, 10); 
}

Вот как это работает на примерах:

console.log('abca12bc45qw'.replace(/[^0-9]/g, '')); // Вывод: '1245'
console.log('#box2'.replace(/[^0-9]/g, '')); // Вывод: '2'

Таким образом, функция retnum извлекает из строки только цифры и преобразует их в целое число.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь