Javascript中的正则表达式:位置表而不是引用表

Javascript中的正则表达式:位置表而不是引用表,javascript,regex,Javascript,Regex,正则表达式是最强大的。但是,它们返回的结果有时是无用的: 例如: 我想使用分号管理CSV字符串。 我定义一个字符串,如下所示: var data = "John;Paul;Pete;Stuart;George"; 如果我使用说明: var tab = data.match(/;/g) 在什么之后,“tab”包含一个4“;”的数组: 这个数组在本例中没有用处,因为我在使用正则表达式之前就知道它了 事实上,我想做的是两件事: 1:抑制第四个元素(不是“斯图尔特”作为“斯图尔特”,而是“斯图尔特

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

例如:

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

var data = "John;Paul;Pete;Stuart;George";
如果我使用说明:

var tab = data.match(/;/g)
在什么之后,“tab”包含一个4“;”的数组:

这个数组在本例中没有用处,因为我在使用正则表达式之前就知道它了

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

  • 1:抑制第四个元素(不是“斯图尔特”作为“斯图尔特”,而是“斯图尔特”作为第四个元素)
  • 第二:将第三个元素替换为“Ringo”,以便返回(您曾经属于的地方!)以下结果:

    data==“约翰;保罗;林戈;乔治”

在本例中,我非常希望获得一个给出分号位置的数组:

tab[0]=4, tab[1]=9, tab[2]=14 tab[3]=21
而不是无用的(在这种情况下)


因此,我的问题是:有没有一种方法可以使用正则表达式获得这个数字数组?

您应该尝试另一种方法,使用
拆分
tab=data.split(“;”)
将返回表单的数组

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

您应该能够使用此数组实现您的目标。

为什么要使用
正则表达式执行此操作?您有一个内置函数split,它可以根据您传递的分隔符分割字符串

var data = "John;Paul;Pete;Stuart;George";
var temp=data.split(';');
temp[0],temp[1]...

要获得
选项卡[0]=4,选项卡[1]=9,选项卡[2]=14,选项卡[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;

}
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
但是如果想要的结果是“约翰;保罗;林戈;乔治”
,你可以这样做

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;

}
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
第二种方法在您的情况下可能更好


您的问题有点不清楚,但我想您正在寻找
拆分
:分号之间的字符串列表如何?这些都很容易获得。另外还有字符串的
join
方法,允许他使用
var tab=data.split(“;”);表[3]=“林戈”;tab=tab.join(“;”)。你可能想补充一点@Derija93这是一种数组方法,不是StringThank谢谢你的帮助,但事实上,我已经知道我经常使用的强大的对拆分/联接。但是,你知道,我这里的问题是找到最快的方法来重建我的全局CSV,同时抑制一个内部元素(在我上面的例子中是5个元素中的第4个),我想知道正则表达式是否有助于简化它?无论如何,感谢您的尝试和帮助。要删除csv中的每四个元素,您可以使用
/^(([^;]+){3});[^;]+;(([^;]+)+)/$1$3/g
。对不起,文斯,我听不懂你的正则表达式。首先,我不理解“([^]+){3}”的用法,这似乎意味着“3个非“;”字符”,而不是“3个由“;”分隔的字符串”。此外,内部字符串可能是空的,如“paul;;;ringo”(4个可怜的死人中有2个!),那么它不应该是“([^;]*;){3}”吗?最后,你能解释一下我不知道的最后一个语法:“/$1$3/g”?谢谢你的帮助。