2015-11-11 54 views
0

我有这样如何在JavaScript中有效匹配字符串中的数字?

XXX-1234 
XXXX-1234 
XX - 4321 
ABCDE - 4321 
AB -5677 

串于是就有开头字母。那么会有连字符。然后是4位数字。字母数量可能会有所不同,但数字的位数是相同的= 4

现在我需要匹配数字的前2个位置。所以我尝试了一个漫长的过程。

temp_digit=mystring; 
temp_digit=temp_digit.replace(/ /g,''); 
temp_digit=temp_digit.split("-"); 
if(temp_digit[1].substring(0,2)=='12') {} 

现在有任何使用正则表达式/模式匹配的过程,以便我可以高效地执行此操作。类似于string.match(regexp)我在正则表达式模式中很愚蠢。我如何从上面的字符串中找到4位数字的前两位数字?此外,它将是伟大的解决方案可以匹配数字没有像连字符XXX 1234但这是可选的。

回答

1

可能会发生变化之后,但位数是相同= 4
现在我需要匹配来自数字的第一2个位置。

此外,它将是伟大的解决方案可以匹配数字不带连字符像XXX 1234但这是可选的。

您确实需要检查它是否以字母开头?如何匹配任何4位数字,并只捕获前2位数字?

的Regex

/\b(\d{2})\d{2}\b/ 

相配:

代码

var regex = /\b(\d{2})\d{2}\b/; 
 
var str = 'ABCDE 4321'; 
 
    
 
var result = str.match(regex)[1]; 
 

 
document.body.innerText += result;

+0

太棒了。非常感谢你 – AtanuCSE

3

尝试使用正则表达式,发现至少有一个字母[a-zA-Z]+,其次是一些空间,如果有必要\s*,后跟一个连字符-,其次是如果有必要\s*一些更多的空间。然后,它相匹配的前两个数字\d{2}图案。:

[a-zA-Z]+\s*-\s*(\d{2}) 
+0

非常好。感谢您的回答。有用。马里亚诺的回答也符合我的选择标准。 – AtanuCSE

0

如果总有4个数字结尾,你可以简单地切它:

str.trim().slice(-4,-2); 

这里是一个jsfiddle的例子字符串: https://jsfiddle.net/mckinleymedia/6suffmmm/

+0

这不是一个好主意,因为任何愚蠢的用户都可能错误地输入空格。我想避免确切的定位号码。 – AtanuCSE

+0

只需添加trim(),然后。我会更新答案 –

相关问题