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

Mal*_*olm 117 javascript regex

如果我有一个像"something12"或"something102"的字符串,我如何在javascript中使用正则表达式返回数字部分?

med*_*iev 199

常用表达:

var numberPattern = /\d+/g;

'something102asdfkj1948948'.match( numberPattern )
Run Code Online (Sandbox Code Playgroud)

这将返回一个内部有两个元素的对象,'102'和'1948948'.按您的意愿操作.如果它不匹配任何它将返回null.

假设你没有处理复杂的小数,我认为这应该足够了.

  • 所有数组都是对象,不是吗? (13认同)
  • @MuhammadUmer,@ meder:你们两个应该结合力:`parseInt('987d98sf79s7f9s8f9sf'.match(/\d +/gi).join(''))` (8认同)
  • @MuhammadUmer - 你试过吗? (6认同)
  • 呃.讨厌挑剔,但这会返回一个数组,而不是一个对象(至少在chrome中). (3认同)
  • @Onza你缺少`d`之前的反斜杠,所以`.match(/\d +/g)` (2认同)

CMS*_*CMS 185

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

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

console.log(word_Without_Numbers)
Run Code Online (Sandbox Code Playgroud)

  • 好吧,除了 OP 想要“只是数字部分”,而不是字符串。 (2认同)

Che*_*hao 22

对于带小数和减号的数字,我使用此代码段:

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

'2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP)
// return ["2.2", "3.1", "4", "-7.6"]
Run Code Online (Sandbox Code Playgroud)

更新: - 7/9/2018

找到一个工具,允许您直观地编辑正则表达式:JavaScript Regular Expression Parser&Visualizer.

更新:

这是另一个甚至可以调试regexp:在线正则表达式测试器和调试器.

更新:

另一个:RegExr.

更新:

Regexper Regex Pal.


小智 16

如果您只想要数字:

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

现在你得到了数字加入


And*_*ore 9

我想你想从字符串中获取数字.在这种情况下,您可以使用以下内容:

// 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
Run Code Online (Sandbox Code Playgroud)


jam*_*ess 7

IMO 如果你想捕获任何类型的数字,陈大超此时的#3答案是正确的方法,但正则表达式可以缩短为:

/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g
Run Code Online (Sandbox Code Playgroud)

到:

/-?\d*\.?\d+/g
Run Code Online (Sandbox Code Playgroud)

例如,这段代码:

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

生成这个数组:

["217","255","0","0","-0.8","-255","0","0","0","70.71"]
Run Code Online (Sandbox Code Playgroud)

我已经删除了一个 MDN 线性渐变示例,以便它完全测试正则表达式并且不需要滚动到这里。我想我已经包含了负数、小数、单位后缀(如 deg 和 %)、不一致的逗号和空格使用以及文本“lin-grad.ient 中额外的点/句点和连字符/破折号”的所有可能性”。如果我遗漏了什么,请告诉我。我唯一能看到它不能处理的是格式错误的十进制数,例如“0..8”。

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

array = whatever.match(/-?\d*\.?\d+/g).map(Number);
Run Code Online (Sandbox Code Playgroud)

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

/-?[\d\.]+/g
Run Code Online (Sandbox Code Playgroud)