如何使用JavaScript在字符串中查找数字?

94
假设我有一个字符串 -“您最多可以输入500个选项”。 我需要从该字符串中提取 500 。
主要问题是字符串可能会变化,例如“您最多可以输入12500个选项”。 所以如何获取整数部分?

2
你应该点击Cletus所给出的答案旁边的勾选标记。它已经足够了。 - Chance
9个回答

154
使用 正则表达式
var r = /\d+/;
var s = "you can enter maximum 500 choices";
alert (s.match(r));

表达式\d+表示“一个或多个数字”。默认情况下,正则表达式是贪婪的,这意味着它们会尽可能多地抓取。此外,这样做:
var r = /\d+/;

等同于:

var r = new RegExp("\d+");

请查看RegExp对象的详细信息

以上代码将抓取第一个数字组。您也可以循环查找所有匹配项:

var r = /\d+/g;
var s = "you can enter 333 maximum 500 choices";
var m;
while ((m = r.exec(s)) != null) {
  alert(m[0]);
}

g(全局)标志对于此循环的工作至关重要。


1
字符串中反斜杠的小错误:var r = new RegExp("\d+");应该改为var r = new RegExp("\d+"); - Bambam
第一个正则表达式有效。第二个 (RexExp(...)) 不起作用。 谢谢 @bambam,在我自己解决问题后才看到了你的评论。 - Sammeeey
第一个正则表达式有效。第二个(RexExp(...))无效。 谢谢@bambam,在我自己解决问题后看到了你的评论。 - undefined

39
抱歉,我无法将HTML标签和JavaScript代码翻译成文本。 我只能提供自然语言的答案和解释。
var regex = /\d+/g;
var string = "you can enter maximum 500 choices";
var matches = string.match(regex);  // creates array from matches

document.write(matches);


еПВиАГиµДжЦЩпЉЪ

вАМвАМвАМвАМвАМregular-expressions.info/javascript.htmlпЉИе≠Шж°£пЉЙ

вАМвАМвАМвАМвАМdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp пЉИе≠Шж°£пЉЙ


18

const str = "you can enter maximum 500 choices";
const result = str.replace(/[^0-9]/g, "");
console.log(result); // "500"

playground: https://regex101.com/r/1ADa3c/1


11

我喜欢@jesterjunk的回答,但是数字不总是只有数字字符。考虑下面这些有效的数字:"123.5, 123,567.789, 12233234+E12"

所以我刚刚更新了正则表达式:

var regex = /[\d|,|.|e|E|\+]+/g;

var string = "you can enter maximum 5,123.6 choices";
var matches = string.match(regex);  // creates array from matches

document.write(matches); //5,123.6

1
你试过正则表达式了吗?它匹配任何一个 e 字符(或者你在列表中有的其他字符,如 "E"、"," 或 ".")。对于你的输入 matches,匹配结果是 [ 'e', 'e', '5,123.6', 'e' ] - user3064538

6

我想补充一下我的看法,因为我只对第一个整数感兴趣,所以我将其简化为:

let errorStringWithNumbers = "error: 404 (not found)";        
let errorNumber = parseInt(errorStringWithNumbers.toString().match(/\d+/g)[0]);

.toString() 只有在您从fetch错误中获取 "string" 时才会添加。如果没有这种情况,则可以从代码行中删除它。


6
您可以尝试这个方法:

var string = "border-radius:10px 20px 30px 40px";
var numbers = string.match(/\d+/g).map(Number);
console.log(numbers)


5

var regex = /\d+/g;
var string = "you can enter 30%-20% maximum 500 choices";
var matches = string.match(regex);  // creates array from matches

document.write(matches);


1
// stringValue can be anything in which present any number
`const stringValue = 'last_15_days';
// /\d+/g is regex which is used for matching number in string
// match helps to find result according to regex from string and return match value
 const result = stringValue.match(/\d+/g);
 console.log(result);`

输出将是15

如果您想了解更多关于正则表达式的内容,这里有一些链接:

https://www.w3schools.com/jsref/jsref_obj_regexp.asp

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

https://www.tutorialspoint.com/javascript/javascript_regexp_object.htm


0

现在,使用'replace'方法和'regexp'非常容易。例如:

findNumber = str => {
  return +(str.replace(/\D+/g, ''));
}

console.log(findNumber("you can enter maximum 500 choices"));
console.log(findNumber("you can enter maximum 12500 choices"));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接