Javascript 带引号或不带引号以及一个或多个用逗号分隔的正则表达式

Javascript 带引号或不带引号以及一个或多个用逗号分隔的正则表达式,javascript,regex,Javascript,Regex,我需要从输入表单中获取字符串中的值以用于搜索,我将提供一些示例: 示例1:name=“Peter Nash”,“Costa”,应返回Peter Nash和Costa。 示例2:name='Peter Nash',“Costa”,应该返回:Peter Nash和Costa。 示例3:name=“Peter Nash”,应返回:Peter Nash。 示例4:name=Peter,“Costa”,应该返回:Peter和Costa。 示例5:name=Peter,Costa,应返回:Peter和Cos

我需要从输入表单中获取字符串中的值以用于搜索,我将提供一些示例:

示例1:
name=“Peter Nash”,“Costa”
,应返回Peter Nash和Costa。
示例2:
name='Peter Nash',“Costa”
,应该返回:Peter Nash和Costa。
示例3:
name=“Peter Nash”
,应返回:Peter Nash。
示例4:
name=Peter,“Costa”
,应该返回:Peter和Costa。
示例5:
name=Peter,Costa
,应返回:Peter和Costa。
示例6:
name=Peter
,应返回:Peter

name
是一个变量,它可以更改

现在我正在使用类似于
newregexp(string\u var+“\:([^]+),”).exec(input),但不使用引号或逗号。

正则表达式:

(?!^name=)("|')?(?<first_name>([A-z]|\s)*)("|')*(\,{0,1})("|')*(?<second_name>(([A-z]|\s)*))("|')*$
(?!^name=)(“|”)(?([A-z]|\s)*)(“|”)*(\,{0,1})(“|”)*((?([A-z]|\s)*)(“|”)*$

代码示例:

让我们=[
“name=”彼得·纳什“,”科斯塔“,
“name=”彼得·纳什“,”科斯塔“,
“name='Peter Nash',“Costa\”,
“姓名=\”彼得·纳什\“,
“name=Peter,\“Costa\”,
“姓名=彼得,科斯塔”,
“姓名=彼得”,
];
常量正则表达式=/(?!^name=)(“|”)(?([A-z]|\s)*)(“|”)*(\,{0,1})(“|”)*(((([A-z]|\s)*)(“|”)*$/;
s、 forEach(函数(输入){
让regexResult=regex.exec(输入);
让output=regexResult[“groups”][“first_name”];
if(regexResult[“groups”][“second_name”]!=”){
输出+='和'+regexResult[“组”][“第二个名称”];
}
控制台日志(输出);

});在其核心,示例文本以逗号分隔,并带有可选引号,可以这样处理。因此,一个.split正则表达式就是解决这个问题的正确方法。常规格式的唯一例外是变量名前缀。以下拆分模式适用于重载:

name=|,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)
由于您不希望在输出中包含var名称,因此我将对其进行
.filter
筛选。此外,通过
.map
在每个元素上使用
.replace
删除引号

代码示例:最后,所有内容都包含在一个漂亮的函数中:

函数拆分字符串(stringToSplit,分隔符){
var arr=stringToSplit.split(分隔符)
.map(str=>str.replace(//^[“]|[“]$/g,``)//删除周围的引号
.filter(布尔);//筛选零长度结果
log('数组有'+arr.length+'元素:'+arr.join('and'));
}
常量逗号=/name=|,(?=(?:[^\“]*\”[^\“]*\”[^\“]*\”*[^\“]*$)/gm;
splitString(`name=“Peter Nash”,“Costa”`,逗号);
splitString(`name='Peter Nash','Costa',逗号);
splitString(`name=“Peter Nash”`,逗号);
splitString(`name=Peter,“Costa”`,逗号);
splitString(`name=Peter,Costa`,逗号);

splitString(`name=Peter`,逗号);
您还可以将字符串按
name=
进行拆分,并获取第二部分,这将是一个逗号分隔的列表。然后您可以使用正则表达式捕获3个组,并在第三个组
(\1)中使用反向引用
以确保起始报价与结束报价相同

然后与第二组一起使用
\$2

let pattern = /^(["'])(.*)(\1)$/;
如果您还允许
“Costa”
,则可以省略反向引用,并将模式替换为:

let pattern = /^(["'])(.*)(['"])$/;
let pattern=/^([“')(.*)(\1)$/;
常量字符串=[
“name=”彼得·纳什“,”科斯塔“,
“name=”彼得·纳什“,”科斯塔“,
“name='Peter Nash',“Costa\”,
“姓名=\”彼得·纳什\“,
“name=Peter,\“Costa\”,
“姓名=彼得,科斯塔”,
“姓名=彼得”,
“测试”,
“测试,”,
“name=”,
“name=”彼得测试\”纳什\“,”科斯塔\“,
“name='Peter Nash\”,“Costa'”
];
strings.forEach((str)=>{
让spl=str.split(“name=”);
如果(spl.length==2&&spl[1].trim()!==“”){
让result=spl[1]。拆分(“,”).map(s=>s.replace(模式,$2”);
console.log(str+“==>”+result.join(“and”);
}

});您的示例(name=“string1”、“string2”)无效。请提供一些代码。@RandyCasburn这些是输入,但如果您想作为JS代码,则类似于
var s=“name=\”Peter Nash\,“Costa\”
一旦您知道如何在
name=
之后提取零件,您就可以使用ridgerunner的
CSVtoArray
函数,基于示例输入的演示如下:有任何答案对您有帮助吗?