2010-09-25 33 views
1

我收到一個奇怪的錯誤「無效的量詞」...有人可以幫我嗎?Javascript匹配錯誤 - 無效量詞

HTML

<input type="text" value="5+5" id="test"/> 

JS

ups = {}; 
    ups['2'] = new Array(); 
    ups['2']['cmd'] = '#(\-|\+|\*|\/|)[0-9](,|[0-9]|)(\-|\+|\*|\/)[0-9]#gi';  

    var inp_val = $('#test').val(); 
    if (inp_val.match(ups['2']['cmd'])) 
    { 
    $('body').append('<br />OK');     
    } 

http://www.jsfiddle.net/V9Euk/639/

回答

4

在Javascript中,正則表達式應該寫成

var re = /thepatterns/mod; 

ups = {}; 
    ups['2'] = new Array(); 
    ups['2']['cmd'] = /(\-|\+|\*|\/|)[0-9](,|[0-9]|)(\-|\+|\*|\/)[0-9]/gi;  

此外,它可以被簡化爲

ups = {2: {cmd: /([-+*\/])\d([,\d]?)([-+*\/])\d/g }}; 

的原因無效量詞是,不像PHP,一個\後跟一個無法識別的字符會導致在那個字符沒有\

  • 的Javascript '\p\q' == 'pq'
  • PHP '\p\q' == '\\p\\q'

因此,你的字符串將被解釋爲

'#(-|+|*|/|)[0-9](,|[0-9]|)(-|+|*|/)[0-9]#gi' 

這是自+(量詞)無效的正則表達式不被任何圖案之前。

+0

好的,我明白了。非常感謝你! – Peter 2010-09-25 10:02:46