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.length3 を期待していますが、常に 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 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 に答える
0
var expression = '/[]+/';

する必要があります

var expression = '[]+';

また、それに応じて部分文字列のインデックスを調整します http://jsfiddle.net/2Pbm3/4/

于 2013-09-20T05:21:46.107 に答える