3

文字列が特定の形式に準拠している場合、文字列に空白を挿入しようとしています。具体的には、文字列が数字のみで構成され、長さがちょうど 5 文字の場合、3 番目と 4 番目の数字の間に空白を追加する必要があります。

これが私のテストケースです:

function codeAddress() {
    var num_regex = /^\d+$/,
            input = $("#distributor-search").val(),
          address = (input.match(num_regex) && input.length == 5) ? input.split('').splice(3, 0 , ' ').join() : input ;

    console.log('The address is: ' + address);

    return false;
}

何らかの理由で、チェーン.split().splice()および.join()何も返さないようです。どこが間違っていますか?

4

4 に答える 4

6

split()配列をsplice()返し、削除された要素を含む配列をjoin()返し、本来のように結合された配列を返します。

ですべてがうまくいかないようsplice()です。残りを与える代わりに、削除されたアイテムを取得します。

私のテスト:

var input = '123,789';
var output = input.split(',').splice(1, 0, '456').join(',');

console.log(output); // outputs nothing, because `splice(1, 0, '456')` doesn't remove any values

次のように、スプライスの機能を使用するプロトタイプを作成することで、これを解決できます。

Array.prototype.isplice = function() {
    var tmp = this;

    Array.prototype.splice.apply(tmp, Array.prototype.isplice.arguments);

    return tmp;
};

var output = input.split(',').isplice(1, 0, '456').join(',');
console.log(output); // outputs ["123", "456", "789"] as expected
于 2013-01-10T14:57:17.123 に答える
3

.splice()他の人が説明したように、結果の配列ではなく削除された要素を返すため、関数は機能しませんでした。

代わりに、この正規表現を使用してみてください。

/^(\d\d\d)(\d\d)$/

文字列が 5 桁の場合にのみ一致し、他の文字列は変更されません。

例:

var s = '123456'.replace(/^(\d\d\d)(\d\d)$/, '$1 $2');
// "123456"
var s = '1234'.replace(/^(\d\d\d)(\d\d)$/, '$1 $2');
// "1234"
var s = '12345'.replace(/^(\d\d\d)(\d\d)$/, '$1 $2');
// "123 45"

だから、あなたの場合:

address = $("#distributor-search").val().replace(/^(\d\d\d)(\d\d)$/, '$1 $2');
于 2013-01-10T14:56:41.163 に答える
2

正規表現自体を使用しないのはなぜですか?

var num_regex = /^(\d\d\d)(\d\d)$/,
        input = $("#distributor-search").val(),
      address = input.match(num_regex);
if (address) address = address[1] + ' ' + address[2];

この正規表現は 5 桁の文字列に一致し、最初の 3 桁と最後の 2 桁をグループ化します。テスト文字列が一致する場合、.match()関数は位置 1 と 2 に 2 つのグループを含む配列を返します (位置 0 は完全な一致です)。

于 2013-01-10T14:53:03.883 に答える
1

あなたの場合、 splice を join と連結することはできません:

splice(3, 0 , ' ').join()

splice は、結果の配列ではなく、削除された項目を含む新しい配列を返すことに注意してください。

于 2013-01-10T15:01:31.510 に答える