正则表达式使用 javascript 只返回数字

如果我有一个像“ something 12”或“ something 102”这样的字符串,我如何在 javascript 中使用正则表达式仅返回数字部分?

303934 次浏览

正则表达式:

var numberPattern = /\d+/g;


'something102asdfkj1948948'.match( numberPattern )

这将返回一个 Array,其中包含两个元素,’102’和’1948948’。你想怎么做就怎么做。如果它不匹配任何值,它将返回 null。

把它们连接起来:

'something102asdfkj1948948'.match( numberPattern ).join('')

假设你不是在处理复杂的小数,我想这应该足够了。

我猜你想从字符串中得到数字。在这种情况下,你可以使用以下方法:

// Returns an array of numbers located in the string
function get_numbers(input) {
return input.match(/[0-9]+/g);
}


var first_test = get_numbers('something102');
var second_test = get_numbers('something102or12');
var third_test = get_numbers('no numbers here!');


alert(first_test); // [102]
alert(second_test); // [102,12]
alert(third_test); // null

您还可以去掉所有非数字字符(\D[^0-9]) :

let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');


console.log(word_Without_Numbers)

给出的答案实际上与你的问题不符,这意味着一个 跟踪编号。另外,请记住您将得到一个返回的字符串; 如果您实际上是 需要数字,则强制转换结果:

item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);

如果你正在处理一个网页上的数字项目 id,你的代码也可以有效地接受一个 Element,从它的 id中提取数字(或者从它的第一个父代中提取一个 id) ; 如果你手边有一个 Event,你也可以从中提取出 Element

var result = input.match(/\d+/g).join([])

如果你只想要数字:

var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714

现在你可以把数字连起来了

对于带有小数分数和负号的数字,我使用以下代码片段:

const NUMERIC_REGEXP = /[-]{0,1}[\d]*[.]{0,1}[\d]+/g;


const numbers = '2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP)


console.log(numbers); // ["2.2", "3.1", "4", "-7.6"]

更新: 2018年7月9日

找到了一个工具,可以让你可视化地编辑正则表达式: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

更新:

下面是另一个甚至可以用来调试 regexp 的程序: 在线正则表达式测试器和调试器

更新:

另一个: Ref = “ https://RegExr.com/”rel = “ noReferrer”> RegExr

更新:

Regexper Ref = “ https://www.regexpal.com/”rel = “ noReferrer”> Regex Pal

我的天,如果你想捕捉任何类型的数字,陈大超的 3号回答是正确的方法,但是正则表达式可以缩短为:

/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g

致:

/-?\d*\.?\d+/g

例如,这段代码:

"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)

生成这个数组:

["217","255","0","0","-0.8","-255","0","0","0","70.71"]

我删除了一个 MDN 线性渐变示例,这样它就可以完全测试 regexp,而不需要在这里滚动。我想我已经包括了所有的可能性,比如负数、小数、单位后缀 deg 和% 、不一致的逗号和空格使用,以及文本“ lin-grad”中额外的点/句点和连字符/破折号字符。等一下。如果我遗漏了什么,请告诉我。我能看到它唯一不能处理的是一个格式糟糕的小数,比如“0”。。8“。

如果您真的想要一个数字数组,您可以在同一行代码中转换整个数组:

array = whatever.match(/-?\d*\.?\d+/g).map(Number);

我的特殊代码是解析 CSS 函数,它不需要担心点/句点字符的非数值使用,因此正则表达式可以更简单:

/-?[\d\.]+/g

如果你还想要点/逗号分隔的数字,那么:

\d*\.?\d*

或者

[0-9]*\.?[0-9]*

可以使用 https://regex101.com/测试正则表达式。

其他解决方案所具有的一切,但需要一点验证

// value = '675-805-714'
const validateNumberInput = (value) => {
let numberPattern = /\d+/g
let numbers = value.match(numberPattern)


if (numbers === null) {
return 0
}


return parseInt(numbers.join([]))
}
// 675805714

使用 split 和 regex:

    var str = "fooBar0123".split(/(\d+)/);
console.log(str[0]); // fooBar
console.log(str[1]); // 0123

根据@Syntle 的回答,如果您只有非数字字符,那么您将得到一个 Uncaught TypeError: Cannot read property 'join' of null

如果没有找到匹配,这将防止错误,并返回一个空字符串:

('something'.match( /\d+/g )||[]).join('')

下面是使用正则表达式将字符串转换为有效的纯数或十进制数的解决方案:

//something123.777.321something to 123.777321
const str = 'something123.777.321something';
let initialValue = str.replace(/[^0-9.]+/, '');
//initialValue = '123.777.321';


//characterCount just count the characters in a given string
if (characterCount(intitialValue, '.') > 1) {
const splitedValue = intitialValue.split('.');
//splittedValue = ['123','777','321'];
intitialValue = splitedValue.shift() + '.' + splitedValue.join('');
//result i.e. initialValue = '123.777321'
}