2016-08-11 44 views
-1

即时消息不是所有熟悉正则表达式的。 IM试图找出如何找到在不使用JavaScript的前面或后面有一个字母串的一些查找字符串中的数字前面或后面没有任何字母在javascript中

s= "sc010sc" 
//shouldnt return 

s = "x0001" 
//shouldnt return 

s = "thing_0001_5642" 
//return [0001, 5642] 



s = "05012" 
//return 05012 
+1

任何特定的编程语言或正则表达式? – NPE

+0

尝试'(?<![0-9a-zA-Z])[0-9] +(?![0-9a-zA-Z])' –

+1

我应该提到即时通讯使用javascript – cronicryo

回答

1

您可以使用

var rx = /(?:^|[^a-z0-9])(\d+)(?![0-9a-z])/ig; 
 
var s = "thing_0001_5642";// with "sc010sc" it does not return any result 
 
var res = []; 
 
while((m=rx.exec(s)) !== null) { 
 
\t res.push(m[1]); 
 
} 
 
console.log(res);

模式详情

  • (?:^|[^a-z0-9]) - 第1组捕捉1个或多个数字
  • (?![0-9a-z]) - - 未随后以数字或字母串或非数字和非字母
  • (\d+)的任开始。

由于使用/i修饰符,因此所有ASCII字母都与[a-z]匹配。

由于我们需要访问捕获值,我在一个循环中使用了一个RegExp#exec来只抓取match[1]的值。

+0

谢谢一堆和解释。不知道为什么它有两个捕获,虽然 – cronicryo

+0

该表达式只有1个捕获组。 'm'匹配对象有2个项目:'m [0]'包含整个匹配,'m [1]'包含捕获组1的值。 –

相关问题