2016-02-24 64 views
0

在谈到JavaScript中的正则表达式与PCE中的正则表达式有些不同之后,我坚持以下内容。JavaScript正则表达式得到字符串后的数字

在PHP I extract a number X:

(?x)[0-9]+ 

在JavaScript中相同的正则表达式不起作用,由于无效组从捕获括号差引起。

所以我想实现同样的功能微不足道,but I keep getting x和数量:

(?:x)([0-9]+) 

如何捕捉到数 X之后不包括X?

+0

这应该起作用(?!x)([0-9] +)。 – gothical

+0

@ gothical是的,它的确如此! –

回答

3

这工作太:

/(?:x)([0-9]+)/.test('YOUR_STRING');

然后,你想要的值是:

RegExp.$1 // group 1

+2

是的那种做我所希望的: var x = str.match(/(?: x)(\ d +)/'来匹配正确的部分,然后用'x [1]'来访问它。我确定必须有更优雅的方式吗? –

+0

A更优雅的方式吗?老兄,我觉得这很美!:D – Jodevan

+0

认真地说,现在我写的这种方式是在JavaScript中使用正则表达式的一种非常常见的方式。 – Jodevan

1

你可以试试下面的正则表达式:(?!x)[0-9]+

小提琴这里:https://jsfiddle.net/xy6x938e/1/

这是假设你正在寻找一个x再跟一个数字,它使用一个捕获组捕获只是数字部分。

var myString = "x12345"; 
var myRegexp = /x([0-9]+)/g; 
var match = myRegexp.exec(myString); 
var myString2 = "z12345"; 
var match2 = myRegexp.exec(myString2); 

if(match != null && match.length > 1){ 
    alert('match1:' + match[1]); 
} 
else{ 
    alert('no match 1'); 
} 
if(match2 != null && match2.length > 1){ 
    alert('match2:' + match2[1]); 
} 
else{ 
    alert('no match 2'); 
} 
+1

其实这是错误的,它会匹配任何数字,忽略它的x,y或z –

+0

更新小提琴https://jsfiddle.net/xy6x938e/1/ – jimplode

-1

你仍然可以使用独特的模式(?!...)

所以,你的例子将是/(?!x)[0-9]+/。请尝试以下操作:

/(?!x)\d+/.exec('x123') 
// => ["123"] 
+0

这个正则表达式的问题(正如在jimplode中评论的那样不管键是'x','y'还是'z',它都会匹配*后面的任何*号。请亲自看看:https://regex101.com/r/oP2eR3/1 –

相关问题