Javascript 在关键字(and)上拆分字符串,引号(';…和…';)除外

Javascript 在关键字(and)上拆分字符串,引号(';…和…';)除外,javascript,regex,Javascript,Regex,我有一个字符串,比如: Price=10.00 and Count=30 and Name='a and b mix' 我想得到结果: ["Price=10.00", "Count=30", "Name='a and b mix'"] 我用任何方法得到它,但我不能。我需要将它们拆分为使用“and”,但如果“and”在引号中,则应忽略它 我试着 但是得到 ["Price=10.00 and", " Count=30 and", " Name='a and", " b mix' and"] 有

我有一个字符串,比如:

Price=10.00 and Count=30 and Name='a and b mix'
我想得到结果:

["Price=10.00", "Count=30", "Name='a and b mix'"]
我用任何方法得到它,但我不能。我需要将它们拆分为使用“and”,但如果“and”在引号中,则应忽略它

我试着

但是得到

["Price=10.00 and", " Count=30 and", " Name='a and", " b mix' and"]

有人知道怎么做吗?

你的RegExp匹配得太多了。试试这个:

/(?:^|\b)[a-z]+=(?:'[^']+'|[^ ]+)/gi
正如你所期望的那样

您可以在此处查看它的操作:

工作原理:

它将检查这是否是字符串的请求,或者之前是否有空格。
然后,它将至少匹配组中的1个字符
[a-z]

之后,它将匹配
=
字符。
最后,它将匹配字符
,然后匹配任何非
,然后匹配
,或者匹配任何非空格的内容


为了适应使用单词
进行拆分是一项要求的信息,我做了以下几点:

/(?:^| and )([a-z]+=(?:'[^']+'|[^ ]+))/gi
它的工作方式是完全相同的(除了有
\b
我有

它只是有一个捕获组来确保它能够正常工作

O.p.说,即使在没有所有这些检查的情况下(
(?:^ |和)
也可以安全地删除,我还是做出了改变

以下是更新的链接:

作为旁注,它可以处理“不正确”格式的输入:

Price=10.00 Count=30和Name='a和b混合'
将匹配
Price[…]
Name[…]

Price=10.00和Count=30 Name='a和b组合'
将匹配
Price[…]
Count[…]

Price=10.00 Count=30 Name='a和b组合'
(无
s)将只匹配
Price[…]

Price and Count=30 Name='a and b mix'
('token'上没有值)将只匹配
Count[…]


等等…

您的RegExp匹配太多。试试这个:

/(?:^|\b)[a-z]+=(?:'[^']+'|[^ ]+)/gi
正如你所期望的那样

您可以在此处查看它的操作:

工作原理:

它将检查这是否是字符串的请求,或者之前是否有空格。
然后,它将至少匹配组中的1个字符
[a-z]

之后,它将匹配
=
字符。
最后,它将匹配字符
,然后匹配任何非
,然后匹配
,或者匹配任何非空格的内容


为了适应使用单词
进行拆分是一项要求的信息,我做了以下几点:

/(?:^| and )([a-z]+=(?:'[^']+'|[^ ]+))/gi
它的工作方式是完全相同的(除了有
\b
我有

它只是有一个捕获组来确保它能够正常工作

O.p.说,即使在没有所有这些检查的情况下(
(?:^ |和)
也可以安全地删除,我还是做出了改变

以下是更新的链接:

作为旁注,它可以处理“不正确”格式的输入:

Price=10.00 Count=30和Name='a和b混合'
将匹配
Price[…]
Name[…]

Price=10.00和Count=30 Name='a和b组合'
将匹配
Price[…]
Count[…]

Price=10.00 Count=30 Name='a和b组合'
(无
s)将只匹配
Price[…]

Price and Count=30 Name='a and b mix'
('token'上没有值)将只匹配
Count[…]


等等…

如果您试图匹配这些键、值对,我建议使用以下正则表达式

"Price=10.00 and Count=30 and Name='a and b mix'".match(/\S+=('[^']+'|\S+)/g)
// ["Price=10.00", "Count=30", "Name='a and b mix'"]

如果您试图匹配这些键、值对,我建议使用以下正则表达式

"Price=10.00 and Count=30 and Name='a and b mix'".match(/\S+=('[^']+'|\S+)/g)
// ["Price=10.00", "Count=30", "Name='a and b mix'"]

只需根据
拆分输入字符串


只需根据
拆分输入字符串

用这个

var str = "Price=10.00 and Count=30 and Name='a and b mix'";
var res = str.replace("and ", ",");
.split()
方法

使用此

var str = "Price=10.00 and Count=30 and Name='a and b mix'";
var res = str.replace("and ", ",");
(.+?)(?:and(?=(?:[^']*'[^']*')*[^']*$)|$)
.split()
方法

(.+?)(?:and(?=(?:[^']*'[^']*')*[^']*$)|$)
你可以试试这个。看演示

您的正则表达式
(.*)和

< p>1)它将捕获直到<代码>和< /代码>而不检查它是否在引号之间。<代码>(=(?:[^:[^’*'’[^’**))/[COD> >仅当不在BETWWIN引文时,才将该检查考虑为<代码>和< /代码>。

2)在最后一个元素之后,没有<代码>和,但它是字符串的结尾。因此,需要捕获到<>代码>和$$/COD>来考虑所有匹配。

你可以试试这个。看演示

您的正则表达式
(.*)和

< p>1)它将捕获直到<代码>和< /代码>而不检查它是否在引号之间。<代码>(=(?:[^:[^’*'’[^’**))/[COD> >仅当不在BETWWIN引文时,才将该检查考虑为<代码>和< /代码>。

2)在最后一个元素之后,没有<代码>和,但它是字符串的结尾。因此,您需要捕获到<>代码>和$$/COD>来考虑所有匹配。

您想在JavaScript中使用ReXEP。您想在JavaScript中使用ReXExp。这不是我想要的。我不想把a和b混在一起,这不是我想要的。我不想把a和b混在一起。很好,它起作用了。但是我想用“and”to关键字来分割它们,谢谢。我想@vks的答案是我想这么做。很好,成功了。但是我想用“and”to关键字来分割它们,谢谢。我想@vks的答案是我想。太好了,用3个部分来匹配它们。第一个:(.+?)、中间:?:和(?=(?:[^']*'[^']*')*[^']*$),最后一个:$在“和”之后添加一个空格将是完美的。(.+?)(?:和(?=(?:[^']*'[^']*')*[^']*$)|$)当不在引号内时,它与空格匹配。你应该修复你的RegExp.great,使用3个部分来匹配它们。第一个:(.+?)、中间:?:和(?=(?:[^']*'[^']*')*[^']*$),最后一个:$在“和”之后添加一个空格将是完美的。(.+?)(?:和(?=(?:[^']*'[^']*')*[^']*$)|$)当不在引号内时,它与空格匹配。您应该修复您的RegExp。