使用Javascript RegExp对象

时间:2013-09-20 05:14:56

标签: javascript regex

我的代码中必须有语法错误,但我看不到它。 fiddle here

var comma = ',,';
var stop = '.。';
var expression = '/[]+/';

expression = expression.substr(0,2) + comma + stop + expression.substr(2);
expression = new RegExp(expression,'g');

var res = "foo,吧。baz".split(expression);

for ( var n=0; n < res.length; n++ ) {
}

我期望res.length为3,但它始终为1并返回完整字符串。我错过了什么?

4 个答案:

答案 0 :(得分:2)

/用作RegExp字面值的分隔符。例如/[a-zA-Z]/g

将模式传递给/构造函数时,不需要

RegExp。例如new RegExp('[a-zA-Z]', 'g')

要解决此问题,请删除/(并修改其余代码):

var expression = '[]+';

或者您可以直接传递RegExp文字:

var res = "foo,吧。baz".split(/[,,.。]+/g);

答案 1 :(得分:1)

当您创建正则表达式时,您使用的是:var expression = '/[]+/';/分隔符是在你声明这样的正则表达式时使用的:

var expression = /[]+/;   // note: no quotes.

您正在使用new Regexp(),因此字符串中不需要它们。删除它们给出了:

var comma = ',,';
var stop = '.。';
var expression = '[]+';

expression = expression.substr(0,1) + comma + stop + expression.substr(1);
expression = new RegExp(expression,'g');

var res = "foo,吧。baz".split(expression);

for ( var n=0; n < res.length; n++ ) {
  var item = document.createElement('li');
  item.innerHTML = res[n];
  document.getElementById('list').appendChild( item );
}

您的期望是什么?见fiddle。我调整了字符串索引和循环索引,以便工作......

答案 2 :(得分:0)

var expression = '/[]+/';

应该是

var expression = '[]+';

此外,相应地调整子串索引 http://jsfiddle.net/2Pbm3/4/

答案 3 :(得分:0)

像这样工作:

var comma = ',,';
var stop = '.。';
var expression = '[]+';

expression = expression.substr(0,1) + comma + stop + expression.substr(1);
expression = new RegExp(expression,'g');

var res = "foo,吧。baz".split(expression);

for ( var n=0; n < res.length; n++ ) {
    var item = document.createElement('li');
    item.innerHTML = res[n];
    document.getElementById('list').appendChild( item );
}