我想获得由4位数字组成的所有数字。之前和之后应该有2个非数字字符或根本没有字符。
这是我到目前为止所拥有的。在这个例子中,正确的结果只是“0000”,但它也匹配1234,4567,5678。
我错过了什么?
Js fiddle:http://jsfiddle.net/M8FYm/3/
来源:
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<title>Regex test</title>
<script type="text/javascript">
$(document).ready(function(){
pattern = '(\D{2})?('+'([0-9]{4})'+')(\D{2})?';
var regexp = new RegExp(pattern, "g");
var string = $('.test').html();
while (match = regexp.exec(string)) {
console.log(match);
}
})
</script>
</head>
<body>
<p class="test">
1234 4567 67
0000 345
456 23 0000
12345678
</p>
</body>
</html>
答案 0 :(得分:2)
var test =
"1234 4567 67\n" +
"0000 345\n" +
"456 23 0000\n" +
"12345678";
test.match(/(^|\D{2})\d{4}(\D{2}|$)/gm)
// => ["0000 ", " 0000"]
正则表达式查找句子的开头或2个非数字,后跟4个数字,然后是句子的结尾或2个非数字。 /m
修饰符使^
匹配行的开头,$
匹配行的结尾,而不仅仅是整个字符串的开头和结尾。
答案 1 :(得分:1)
此处示例中的测试字符串与jsfiddle上的测试字符串不同。通过将正确的间距(2)和多行修改器(m)添加到修订的正则表达式,它应该返回所需的结果:
/\D{2}[0-9]{4}\D{2}/gm
结果:
0000
0000