2017-08-13 44 views
1

举例来说,如果我有文字是这样的:匹配数字

"hello800 more text 1234 and 567" 

应该匹配1234567,而不是800(自它跟在helloo之后,这不是数字)。

它与编程语言所做的类似,例如,在JavaScript中,abc123是一个变量,而50单独,而不是跟随文本,被视为数字。

请记住,我只是否定了集合[A-Za-z]中的字符而不是其他字符。例如,+33-33仍然应返回33

我的第一次试验是匹配不能设置

[^A-Za-z]([0-9]+) 

这并没有在所有的工作。

我的第二次审判是扭转字符串,并使用负前瞻:

/([0-9]+)(?![A-Za-z])/g 

它的工作原理只有在有1位。 1a不符合1(这很好),但123a匹配12(这很糟糕)。

+0

https://www.w3schools.com/Jsref/jsref_match.asp – Amit

回答

2

你可以试试下面的正则表达式

\b\d+\b 

可以检查demo这里

另外,如果你想匹配+33,你也可以尝试正则表达式

\b[+-]*\d+\b 

demo

1

试试这个\b(\d+?)\b

  • \b检查的单词边界(空格,endlines,等..)
  • \d检查对数字

Demo Here

1

var str = "hello800 more text 1234 and 567 blah blah +33 end"; 
 
var result = str.match(/\b\d+\b/g); 
 
console.log(result);

说明:

\b : word boundary, make sure we don't have letter or digit before 
\d+ : 1 or more digits 
\b : word boundary, make sure we don't have letter or digit after