0

私は頻繁に手で変更しなければならないいくつかの数値のリストを持っています。これを実行すると、出力として (#2) が得られます。私がやりたいことは、var xyz が新しいセクションに到達するたびに変更され、次のセクションに到達するまで新しい var でラベルを付け続けることです。(#3) 私の質問が明確であることを願っています。(どうやらそうではないようです...) 私は何か非常に間違ったことをしていることを知っています。したがって、ヒントをいただければ幸いです。

(19.32 spec03 20.56 2 20.84 3 39.32 spec04 30.56 2 30.84 3)

(19.32 スペック03 20.56 スペック06 20.84 スペック06 39.32 スペック04 30.56 スペック06 30.84 スペック06 )

( 19.32 spec03 20.56 spec03 20.84 spec03 39.32 spec04 30.56 spec04 30.84 spec04) [太字の値は新しいセクションの最初のインスタンスです]

var xyz = 'spec06';
var str = '19.32    spec03 20.56    2 20.84 3';
var patt1 = /([0-9]+\.[0-9]+\t)([0-9]+)/;
var patt2 = /([0-9]+\.[0-9]+\t)(spec[0-9]+)/;
function cleaner() {
for (i = 1; i <= 150; i++) {
    //xyz = str.replace(patt2, '$1') <-- this crashes the program...?
    str = str.replace(patt1, '$1' + xyz)

    }

}

ライブバージョンのメモ: 応答するには、タブで区切られた入力が必要です...

here is a sample of some input i would be using: 278.091182 spec35 279.300274 2 279.842670 3 280.204268 4 281.006563 5 281.503759 6 282.339954 7 282.532053 8 282.690252 9 283.300448 10 285.357034 11 285.718632 12 286.407927 e 287.809118 spec36 288.747012 2 288.927811 3 289.266809 4

4

2 に答える 2

1

ここではループを使用しませんが、関数 forreplaceを持つグローバル正規表現を使用します。完全なグループ (数値と仕様、または数値と整数) に一致し、数値と仕様に置き換えられます。spec仕様番号が一致した場合、変数を更新してそれを使用します。

var str = '19.32    spec03 20.56    2 20.84 3';
var spec = "06"; // initial spec number
return str.replace(/(\d+\.\d+)\s+(spec)?(\d+)/g, function(whole, num, sp, spn) {
    if (sp) // second group matched "spec"
        spec = spn; // set new spec number
    return num + "\tspec" + spec;
});

( jsfiddle.net のデモ)

于 2012-08-02T21:09:47.270 に答える
0

私はあなたのコードを完全に作り直しましたが、これでうまくいくはずです:

var str = '19.32    spec03 20.56    2 20.84 3';
var items = str.split(/\s+/);   // break up at whitespace

var xyz = "spec06"; // spec number
items = items.map(function(item) {    // cycle through and modify each item
    if(item.indexOf("spec") != -1) {    
        xyz = item; // keep track of spec number
        return item;
    } else {
        return item+xyz;    // append spec number
    }
});
str = items.join("    ");    // join with whitespace again

ライブ版: http://jsfiddle.net/Tys95/

于 2012-08-02T21:05:07.227 に答える