Javascript匹配错误 - 无效的量词

时间:2010-09-25 09:46:20

标签: jquery

我收到一个奇怪的错误“无效的量化器”...有人可以帮我吗?

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/

1 个答案:

答案 0 :(得分: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'

这是一个无效的正则表达式,因为+(量词)之前没有任何模式。