2014-02-26 22 views
4

我想要得到所有由4位數字組成的數字。之前和之後應該有2個非數字字符或根本沒有字符。Javascript正則表達式匹配數字用非數字字符分隔

這是我到目前爲止。在這個例子中,正確的結果將只是「0000」,但它也匹配1234,4567,5678。

我錯過了什麼?

的js撥弄: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> 

回答

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位數字,然後由終端的一個句子或兩個非數字。 /m修飾符使得^匹配行的開始,並且$結束行,而不僅僅是整個字符串的開始和結束。

1

您示例中的測試字符串與jsfiddle上的不一樣。通過將正確的間距(2)和多行改性劑(m)至一個正則表達式訂正它應該返回所期望的結果:

/\D{2}[0-9]{4}\D{2}/gm 

結果:

0000 
0000 

例如:http://jsfiddle.net/Ebxfj/

相關問題