javascript和grep来替换一个变量

javascript and grep to replace a variable

本文关键字:一个 变量 grep 替换 javascript      更新时间:2023-09-26

我有一些数字列表,我经常需要手动更改。var str(下面的#1)中列出了一个小样本,当它运行时,它会输出(#2)。我想让var xyz每次到达一个新的部分时都会发生变化,并继续用新的var标记它们,直到到达下一个部分。(#3)我希望我的问题很清楚。(显然不是…)我知道我做错了什么,这可能一开始就不是最好的方式。因此,任何提示都将不胜感激。

(19.32规范03 20.56 2 20.84 3 39.32规范04 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规范0320.56规范03 20.84规范0339.32规范0430.56规范04 30.84规范04)[粗体值是新节的第一个实例]

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)
    }
}

实时版本说明:您需要一些以制表符分隔的输入,以便它做出响应。。。

以下是我将使用的一些输入的示例:278.091182规范35 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规范36 288.747012 2 288.927811 3 289.26809 4

我不会在这里使用循环,而是使用带有replace函数的全局正则表达式。它确实匹配完整的组(数字加规范,或数字和整数),并用数字加规范替换它。如果规范编号匹配,它将更新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;
});

(jsfidd.net上的演示)

我完全重新编写了您的代码,但这应该可以做到:

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/