dポイントプレゼントキャンペーン実施中!

URLクエリに日付フィールドの検索条件を渡すjavascriptをカスタマイズしているのですが、
「like」or「<=」or「>=」で文字を分割し、配列に格納する部分で、splitの正規表現の書き方を以下のようにしているのですが上手くいってないようです。


for( var i = 0; i < parameters.length; i++ ){
var k = /like|<=|>=/; //分割するキー
var element = parameters[ i ].split(k);
var paramName = decodeURIComponent( element[ 0 ] );
var paramValue = decodeURIComponent( element[ 1 ] );

// スペースと""をtrimして、文字列だけにしてから、配列に格納
result[ paramName.replace(/^\s+|\s+$/g, "") ] = paramValue.replace(/^[\s|\"]+|[\s|\"]+$/g, "");
}

どのようにしたら正しく分割されますでしょうか?

A 回答 (4件)

こんにちは



>var k = /like|<=|>=/;
は、正規表現リテラルとなるはずなので、ご提示の記述で問題は無いと思います。(文字列ではない)
具体的にどのような内容を解釈しようとするとうまくいかないのでしょうか?

ご提示のスクリプトから勝手に想像すると・・・
得られた{ key, value }値で、valueがundefinedなどになっているものがあるかも。
元のparametersが指定のセパレータを含んでいない場合は、element[ 1 ]は未定義になりますが、スクリプトではそのまま使っているので・・・
あるいは、元のparametersが複数のセパレータを含んでいる可能性はないのでしょうか?
この場合は全て分割されるので、仮にelement[ 2 ]以降が存在したとしても無視されることになります。
    • good
    • 0
この回答へのお礼

正規表現が間違っていると思い込んでいたのですが、ご指摘の通り「元のparametersが複数のセパレータを含んでいる」原因はこれでした!
問題解決の糸口を作っていただきありがとうございました。

お礼日時:2018/11/16 16:11

>No.2 回答者: amanojaku6



>element = test.split(/like|<=|>=/);

「test.split("/like|<=|>=/")」のように文字列として指定すると正規表現とは認識されないので注意して下さい(つまり(文字列)変数も正規表現とは認識されません)。
    • good
    • 0

正規表現を変数に入れずに、split(~)の引数に直接 記述して下さい。



【例】
test = "AAAlikeBBB<=CCC>=DDD";
element = test.split(/like|<=|>=/);
for( i = 0; i < element.length; i++ ){
document.write('i='+i+'; ');
document.write('element[i]="'+element[i]+'"; ');
document.write('<br>');
}

【結果】

i=0; element[i]="AAA";
i=1; element[i]="BBB";
i=2; element[i]="CCC";
i=3; element[i]="DDD";
    • good
    • 0

具体的に何が何に変換されるイメージなのかいくつか実例をあげてください

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!