Как извлечь число из строки в JavaScript?
У меня есть строка в JavaScript (например, #box2
), и мне нужно получить только 2
из нее.
Я попробовал следующий код:
var thestring = $(this).attr('href');
var thenum = thestring.replace(/(^.+)(\w\d+\w)(.+$)/i, '$2');
alert(thenum);
Но в alert все еще возвращается #box2
. Как мне это исправить?
Важно, чтобы это решение работало с любым числом, которое может быть прикреплено в конце строки.
4 ответ(ов)
Ваш вопрос о регулярных выражениях в 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>
Вы можете использовать этот код для извлечения цифр из строк и создания регулярных выражений в зависимости от введённых значений. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!
Вы можете попробовать следующее:
var txt = "#div-name-1234-characteristic:561613213213";
var numb = txt.match(/\d/g);
numb = numb.join("");
console.log(numb);
Этот код использует регулярное выражение \d
, чтобы найти все цифры в строке txt
. Затем он объединяет их в одну строку с помощью метода join("")
. В результате вы получите строку, содержащую все цифры из исходного текста.
Я думаю, что это регулярное выражение подойдет вам:
var num = txt.replace(/[^0-9]/g, '');
Где txt
— это ваша строка.
Оно просто удаляет всё, что не является цифрой.
Также, вы можете достичь того же результата, используя вот это:
var num = txt.replace(/\D/g, '');
Оба варианта будут работать для вашей задачи.
Вы можете попробовать следующий код: 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
извлекает из строки только цифры и преобразует их в целое число.
Как лучше всего преобразовать число в строку в JavaScript?
Как посчитать количество вхождений строки в строке?
Как удалить все переносы строк из строки
Преобразование объекта JS в строку JSON
Как заменить символ по заданному индексу в JavaScript?