10

正規表現はその場で作成されますが、firebugに出力しました。

(.{1,38})(+|$\n?)

エラーは

invalid quantifier +|$\n?)

どこから始めたらいいのかわからない。

実際のコードは次のとおりです。

var re = top.RegExp;
var regex = new re("(.{1," + len + "})(+|$\\n?)", "gm");

更新: Bennor McCarthyの指示に従って、コードを次のように変更しました。

 var regex = new re("(.{1," + len + "})(\+|\$\\n?)", "gm");

Firebugはまだこれを教えてくれます:

invalid quantifier +|$\n?)
[Break on this error] var regex = new re("(.{1," + len + "})(\+|\$\\n?)", "gm"); 

別の更新 私はそれをダブルスラッシュしなければならなかったように見えます、そしてこれは問題を解決しました!

最終コード

var regex = new re("(.{1," + len + "})(\\+|\\$\\n?)", "gm");
4

2 に答える 2

14

問題は+です。これは、エスケープする必要のある数量詞です。

代わりにこれを使用してください:

/(.{1,38})(\+|$\n?)/

または文字列内:

"(.{1,38})(\\+|$\\n?)"

リテラルの$とそれに続く改行を一致させたい場合は、$をエスケープする必要があります\(または\\文字列内-説明については、この下の最後のコメントを参照してください)。

数量詞に関する情報を次に示します。

于 2010-09-14T22:12:20.460 に答える
3

数量詞は「いくつ」を意味します。最も一般的なのは、ゼロ以上を意味する「*」です。数量子「+」は、1 つ以上を意味します。

不正な量指定子に関するエラーが発生した場合、ほとんどの場合、それが属していない場所に量指定子があることを意味します。たとえば、それらは「いくつ」を意味するので、明らかに何かを指しているに違いありません。パターンまたはグループの先頭に 1 つ配置すると、正規表現は「何を何個?」と考えます。

特定のケースでは、グループ化文字「(」の直後に「+」があるため、エラーが発生します。「+」をエスケープして、量指定子として扱われないようにするか、文字またはグループを配置する必要があります。あなたのケースでは、実際の「+」文字と一致させようとしている場合、おそらく最初のものです。

于 2010-09-14T22:26:50.623 に答える