Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中有效地匹配字符串中间的数字?_Javascript_Regex - Fatal编程技术网

如何在javascript中有效地匹配字符串中间的数字?

如何在javascript中有效地匹配字符串中间的数字?,javascript,regex,Javascript,Regex,我有像 XXX-1234 XXXX-1234 XX - 4321 ABCDE - 4321 AB -5677 所以开头会有字母。然后会有连字符。然后是4位数。字母数可能不同,但数字数相同=4 现在我需要匹配数字的前两个位置。所以我尝试了一个漫长的过程 temp_digit=mystring; temp_digit=temp_digit.replace(/ /g,''); temp_digit=temp_digit.split("-"); if(temp_digit[1].substring(0

我有像

XXX-1234
XXXX-1234
XX - 4321
ABCDE - 4321
AB -5677
所以开头会有字母。然后会有连字符。然后是4位数。字母数可能不同,但数字数相同=4

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

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

现在是否有任何使用正则表达式/模式匹配的过程,以便我能够以有效的方式进行匹配。有点像我在正则表达式模式中很笨。如何从上述字符串的4位中找到前两位?另外,如果解决方案可以匹配不带连字符的数字(如
XXX 1234
),那就太好了,但这是可选的。

尝试一个正则表达式,该表达式至少可以找到一个字母
[a-zA-Z]+
,必要时后跟一些空格
\s*
,然后是连字符
-
,如有必要,请在后面加上一些空格
\s*
。然后,它匹配模式后的前两个数字
\d{2}

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

尝试一个正则表达式,该表达式至少查找一个字母
[a-zA-Z]+
,如果需要,后跟一些空格
\s*
,然后是连字符
-
,如果需要,再后跟一些空格
\s*
。然后,它匹配模式后的前两个数字
\d{2}

[a-zA-Z]+\s*-\s*(\d{2})
可能会有所不同,但位数相同=4
现在我需要匹配数字的前两个位置

如果该解决方案可以匹配没有连字符的数字,如
XXX 1234
,那也太好了,但这是可选的

你真的需要检查它是否以字母开头吗?如何匹配任何4位数字,只捕获前2位数字

Regex

/\b(\d{2})\d{2}\b/
匹配项:

  • \b
    a
  • (\d{2})
    2位数字,并分配给
    匹配[1]
  • \d{2}
    2位以上(未捕获)
  • \b
    a
代码

var regex=/\b(\d{2})\d{2}\b/;
var str='ABCDE 4321';
var结果=str.match(regex)[1];
document.body.innerText+=结果
可能会有所不同,但位数相同=4
现在我需要匹配数字的前两个位置

如果该解决方案可以匹配没有连字符的数字,如
XXX 1234
,那也太好了,但这是可选的

你真的需要检查它是否以字母开头吗?如何匹配任何4位数字,只捕获前2位数字

Regex

/\b(\d{2})\d{2}\b/
匹配项:

  • \b
    a
  • (\d{2})
    2位数字,并分配给
    匹配[1]
  • \d{2}
    2位以上(未捕获)
  • \b
    a
代码

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

document.body.innerText+=结果如果结尾总是有4位数字,您可以简单地将其切片:

str.trim().slice(-4,-2);
下面是一个带有示例字符串的JSFIDLE:

如果结尾总是有4位数字,您可以简单地将其切片:

str.trim().slice(-4,-2);
下面是一个带有示例字符串的JSFIDLE:

这不是一个好主意,因为任何愚蠢的用户都可能在最后错误地进入空格。我想避免使用准确的定位号。这不是一个好主意,因为任何愚蠢的用户都可能在最后错误地进入一个空格。我想避开准确的定位号。太好了。谢谢你的回答。它起作用了。马里亚诺的回答也符合我的可选标准。非常好。谢谢你的回答。它起作用了。马里亚诺的回答也符合我的可选标准。太棒了。非常感谢你。多谢各位