Answers:
常用表达:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
这将返回一个数组,其中包含两个元素“ 102”和“ 1948948”。随心所欲地操作。如果不匹配,则返回null。
串联它们:
'something102asdfkj1948948'.match( numberPattern ).join('')
假设您不处理复杂的小数,我想就足够了。
d
,所以.match(/\d+/g)
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
对于带有十进制小数和减号的数字,我使用以下代码段:
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"]
更新:-7/9/2018
找到了一个可让您直观地编辑正则表达式的工具:JavaScript Regular Expression Parser&Visualizer。
更新:
这是您甚至可以用来调试正则表达式的另一个工具:在线正则表达式测试器和调试器。
更新:
另一个:RegExr。
更新:
如果只需要数字:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
现在您将数字加入
我想您想从字符串中获取数字。在这种情况下,可以使用以下方法:
// 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
get_numbers/1
返回一个字符串数组,而不是数字。对于你的榜样,它会返回:* ["102"]
* ["102", "12"]
*空
给出的答案实际上与您的问题不符,后者暗示一个尾随数字。另外,请记住,您将得到一个字符串。如果您确实需要一个数字,则将结果转换为:
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
。
如果您要捕获任何数字,则IMO Chen Dachao给出的第三答案是正确的方法,但是正则表达式可以缩短为:
/[-]{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.ient”中包含了多余的点/句号和连字符/破折号等所有可能性”。如果我缺少什么,请告诉我。我只能看到它无法处理的是格式错误的十进制数字,例如“ 0..8”。
如果您确实想要一个数字数组,则可以在同一行代码中转换整个数组:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
我特定的代码(用于解析CSS函数)无需担心点/句点字符的非数字用法,因此正则表达式甚至可以更简单:
/-?[\d\.]+/g
使用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('')