0

正则表达式是最强大的。但是,它们返回的结果有时是无用的:

例如:

我想使用分号管理 CSV 字符串。我定义了一个字符串,如:

var data = "John;Paul;Pete;Stuart;George";

如果我使用指令:

var tab = data.match(/;/g)

之后,“tab”包含 4 个“;”的数组 :

tab[0]=";", tab[1]=";", tab[2]=";", tab[3]=";"

这个数组在目前的情况下没有用,因为我在使用正则表达式之前就知道了。

事实上,我想做的是两件事:

  • 1stly:抑制第四元素(不是“Stuart”为“Stuart”,而是“Stuart”为第四元素)
  • 第二:用“Ringo”替换第三个元素,以便返回(回到你曾经属于的地方!)以下结果:

    data == "John;Paul;Ringo;George";

在这种情况下,我非常希望获得一个给出分号位置的数组:

tab[0]=4, tab[1]=9, tab[2]=14 tab[3]=21

而不是无用的(在这种特定情况下)

tab[0]=";", tab[1]=";", tab[2]=";", tab[3]=";"

所以,这是我的问题:有没有办法使用正则表达式来获取这个数字数组?

4

3 回答 3

1

您应该尝试不同的方法,使用split. tab = data.split(';')将返回表单的数组

tab[0]="John", tab[1]="Paul", tab[2]="Pete", tab[3]="Stuart", tab[4]="George"

您应该能够使用此阵列实现您的目标。

于 2013-09-26T09:04:33.083 回答
1

要得到tab[0]=4, tab[1]=9, tab[2]=14 tab[3]=21,你可以做

var tab = [];
var startPos = 0;
var data = "John;Paul;Pete;Stuart;George";

while (true) {

    var currentIndex = data.indexOf(";", startPos);

    if (currentIndex == -1) {
        break;
    }

    tab.push(currentIndex);
    startPos = currentIndex;

}

但如果想要的结果是"John;Paul;Ringo;George",你可以做

var tab = data.split(';'); // Split the string into an array of strings

tab.splice(3, 1); // Suppress the 4th element
tab[2] = "Ringo"; // Replace the 3rd element by "Ringo"

var str = tab.join(';');   // Join the elements of the array into a string

在您的情况下,第二种方法可能更好。

于 2013-09-26T09:08:30.013 回答
0

为什么使用 aregex来执行这个操作?您有一个内置函数 split,它可以根据您传递的分隔符拆分您的字符串。

var data = "John;Paul;Pete;Stuart;George";
var temp=data.split(';');
temp[0],temp[1]...
于 2013-09-26T09:06:03.543 回答