2013-12-09 51 views
1

一個正則表達式,我想測試一個字符串中的正則表達式
^(?:\(|%[0-9]+)(?:\s+|%[0-9]+|\) and+|\) or+|\)+|and|or|\()*$
我已經測試過此正則表達式針對不同的場景和我需要工作正常的字符串。我用http://gskinner.com/RegExr/來測試它。
當我嘗試在javascript中使用它時,它給了我運行時錯誤,說正則表達式無效。我使用下面的代碼測試反對在Javascript

var pattern = new RegExp("^(?:\(|%[0-9]+)(?:\s+|%[0-9]+|\) and+|\) or+|\)+|and|or|\()*$"); 
var filterExpress = this.model.FilterExpression(); 
var result = pattern.test(filterExpress); 

當我嘗試使用它,如下

var pattern = /^(?:\(|% [0 - 9]+)(?:\s+ |% [0 - 9]+|\) and+|\) or+|\)+ | and | or|\() * $/; 

總是返回假。請幫忙。

+1

RegExr使用Regex的actionscript(flash)實現。這與Regex的JS實現(或正則表達式的PERL/PHP實現)不一樣。您可以使用[regex101](http://regex101.com)更改實現(查看PCRE的頂部 - 將其更改爲javascript)並測試JS正則表達式。 – h2ooooooo

回答

0

使用此宣告你的正則表達式:

re = /^(?:\(|%[0-9]+)(?:\s+|%[0-9]+|\) and+|\) or+|\)+|and|or|\()*$/; 

或使用RegExp對象:

var pattern = new RegExp("^(?:\\(|%[0-9]+)(?:\\s+|%[0-9]+|\\) and+|\\) or+|\\)+|and|or|\\()*$"); 

記住,你需要在RegExp構造翻番逃生。

+0

這不是一個無與倫比的支架。這是我表達的要求。我匹配像(%1和%2)這樣的字符串。我的表達是正確的,因爲我已經在正則表達式工具上進行了測試,問題是我無法將我的字符串與javascript進行比較。 – JSLearner

+0

查看更新後的答案。我在編輯問題之前發佈了我的答案。 – anubhava

+0

感謝那些作品......當我在javascript中編寫圖案時,需要使用哪些字符才能逃脫? – JSLearner