0

我的代码中一定有语法错误,但我看不到它。在这里摆弄

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

4 回答 4

2

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

/RegExp将模式传递给构造函数时不需要。例如new RegExp('[a-zA-Z]', 'g')

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

var expression = '[]+';

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

var res = "foo,吧。baz".split(/[,,.。]+/g);
于 2013-09-20T05:26:05.293 回答
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 );
}

哪个符合您的期望。看到这个小提琴。我已经调整了字符串索引和循环索引,以便一切正常......

于 2013-09-20T05:23:20.953 回答
0
var expression = '/[]+/';

应该

var expression = '[]+';

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

于 2013-09-20T05:21:46.107 回答
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 );
}
于 2013-09-20T05:23:37.560 回答