2012-04-04 3 views
215

У меня есть строка в javascript, например `# box2 ', и я просто хочу от нее« 2 ».JavaScript получить номер из строки

Пробовал:

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

Он по-прежнему возвращает # BOX2 в боевой готовности, как я могу заставить его работать?

Он должен быть установлен для любого номера длины, прикрепленного к концу.

+0

вы можете просто сделать, как это. он будет работать хорошо. var thestring = $ (this) .attr ('href'); var thenum = parsefloat (thestring); alert (thenum); –

+0

этот код работает отлично для меня, но для одного случая у меня есть строка «2,5/mile», и я хочу извлечь 2,5 из этого. Выше кода дает мне 25 вместо 2.5 –

+0

Связано: https://stackoverflow.com/q/1862130/1066234 –

ответ

386

Для этого конкретного примера,

var thenum = thestring.replace(/^\D+/g, ''); // replace all leading non-digits with nothing 

в общем случае:

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>'; 
 
}
<p>Hi, I'm Numex, the Number Extractor Oracle. 
 
<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>

+11

-1, '" # box2_col3 ".replace (/^\ D +/g, '')' должно было показать '2', а не' 2_col3'. –

+1

@ shiplu.mokadd.im: Я не вижу ссылки на '# box2_col3' в вопросе. – georg

+1

Да нет ссылки на '# box2_col3'. Но см. Используемое регулярное выражение OP ('\ w) (. + $)'), Которое ясно указывает на наличие других символов после номера. –

4

Для строки, такие как #box2, это должно работать:

var thenum = thestring.replace(/^.*(\d+).*$/i,'$1'); 

jsFiddle:

47

Использование функции соответствия.

var thenum = thestring.match(/\d+$/)[0]; 
alert(thenum); 

jsfiddle

+1

Также вы можете добавить унарный '+', чтобы сделать его целым числом var thenum = + thestring.match (/ \ d + $ /) [0]; –

+0

Я думаю, это не работает для> 1-значных чисел? (Я понимаю, что вопрос был для 1 цифры цифр, но я смотрю на число возможных> 10.) – Felix

+0

@nissemand Dont ** guess **. Попробуйте сами. Даже вы не видели скрипку. –

4

Вы можете использовать регулярные выражения.

var txt="some text 2"; 
var numb = txt.match(/\d/g); 
alert (numb); 

Это будет предупреждать 2.

+3

-1 несколько цифр не будут записаны и для использования массива в оповещении –

135

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

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

результат

1234561613213213 
3

Вы можете использовать Underscore Library Строка следующим

var common="#box" 
var href="#box1" 

_(href).strRight(common) 

результат будет: 1

См : https://github.com/epeli/underscore.string

DEMO:
http://jsfiddle.net/abdennour/Vyqtt/
HTML код:

<p> 
    <a href="#box1" >img1</a> 
    <a href="#box2" >img2</a> 
    <a href="#box3" >img3</a> 
    <a href="#box4" >img4</a> 
</p> 
<div style="font-size:30px"></div> 

JS код:

var comm="#box" 
$('a').click(function(){ 
    $('div').html(_($(this).attr('href')).strRight(comm))}) 

, если у вас есть суффикс следующим образом:

href="box1az" 

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

http://jsfiddle.net/abdennour/Vyqtt/1/

function retrieveNumber(all,prefix,suffix){ 
var left=_(all).strRight(prefix); 
return _(left).strLeft(suffix); 

} 
44

Я думаю, что это регулярное выражение будет служить вашей цели:

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

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

Это в основном отрывает все, что не является цифрой.

Я думаю, что вы можете достичь того же с помощью этого, а также:

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

'/ [^ 0-9]/g' +1 для удобства чтения. Также используется с большинством ответов здесь: https://stackoverflow.com/q/1862130/1066234 –

28

Пробовал все комбинации, приведенные выше с настоящим Кодексом и получил его работу, был единственным, который работал на этой строке ->(12) 3456-7890

var str="(12) 3456-7890"; 
str.replace(/\D+/g, ''); 

Результат:"1234567890"

Обс: Я знаю, что такая строка не будет на attr, но что угодно, решение лучше, потому что оно более полно.

10

вы можете использовать большой метод ParseInt

он преобразует начальные цифры к номеру

parseInt("-10px"); 
// will give you -10 
+12

это работает только тогда, когда число находится в начале строки – Russj

+0

его возвращение NaN –

24

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

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

console.log('abca12bc45qw'.replace(/[^0-9]/g, '')); 
 
console.log('#box2'.replace(/[^0-9]/g, ''));

5

С регулярных выражений, как получить число из строки, например:

String myString = "my 2 first gifts were made by my 4 brothers"; 
myString = myString .replaceAll("\\D+",""); 
System.out.println("myString : " + myString); 

результат myString является «24»

вы можете увидеть пример этого исполняемый код здесь: http://ideone.com/iOCf5G

+1

java! == javascript - replaceAll не существуют в стандартном javascript. Только такие библиотеки, как jQuery, имеют этот метод. В будущем вы должны уточнить. –

1

Вот так л. что проверяет нет данных

var someStr = 'abc'; // add 123 to string to see inverse 

var thenum = someStr.match(/\d+/); 

if (thenum != null) 
{ 
    console.log(thenum[0]); 
} 
else 
{ 
console.log('no number'); 
} 
1

Используйте эту одну строку кода, чтобы получить первый номер в строке без получения ошибок:

var myInt = parseInt(myString.replace(/^[^0-9]+/, ''), 10); 
21

И это фрагмент, который извлекает цены с валюты и форматирования:

var price = "£1,739.12"; 
parseFloat(price.replace(/[^\d\.]*/g, '')); // 1739.12 
1

пожалуйста, проверьте ниже JavaScripts, там вы можете получить только номер

var txt = "abc1234char5678#!9"; 
 
var str = txt.match(/\d+/g, "")+''; 
 
var s = str.split(',').join(''); 
 
alert(Number(s));

выход: 1234567789

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