2015-10-14 47 views
3

我正在使用jquery-highlighttextarea庫和jquery-1.7.2.js作爲示例應用程序,該示例應用程序旨在匹配並突出顯示input標記中的valid IPv4 address正則表達式匹配在jquery-highlighttextarea庫中不起作用

有一個regex

<script> 
    $(document).ready(function() {   
    $("#demo1").keypress(function() { 
     $('#demo1').highlightTextarea({ 
      words: { 
      color: '#ADF0FF', 
      words: ['[0-9]{1,3}'] // regex goes here 
      } 
     }); 
    }); 
    }); 

HTML設施相匹配,並強調基於文本:

<body> 
    <article> 
    <input id="demo1" class="inputBox"></input> 
    </article> 
</body> 

我以前(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)的正則表達式來趕IP地址。 It was in here.

<script> 
    $(document).ready(function() {   
    $("#demo1").keypress(function() { 
     $('#demo1').highlightTextarea({ 
      words: { 
      color: '#ADF0FF', 
      words: ['(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'] 
      } 
     }); 
    }); 
    }); 
</script> 

但問題是現在它不正確地匹配文本。即它將把這個(256.2.3)和這個(23 123.123.123)當作有效的IP。

我認爲有人熟悉正則表達式或這個特定的圖書館可以幫助我。

回答

2

words值是一個字符串,它需要雙斜槓來轉義正則表達式元字符。現在,它內部的\.被視爲一個特殊的正則表達式子模式匹配任何字符,但一個換行符,這就是爲什麼你得到匹配你不想要的地方。

使用字符類來「包裝」這些字符並將其視爲文字符號總是比較安全的。

使用

words: ['(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.]){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'] 

如果你需要驗證這正是IPv4地址字符串(比如,它應該只包含IPv4地址),您將使用^(=串開始)和$安全( =字符串結束)主播:

words: ['^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.]){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'] 
+1

以及該作品(Y)謝謝:) – prime

+0

順便說一句,如果你能請您分享的方式來選擇所有其他的事情想到的IP地址。基本上,如果我需要否定整個正則表達式來選擇所有其他正則表達式的含義,我該怎麼做? – prime

+0

如果沒有'!regex.test(str)',這很難做到。 –