在关键字(和)上拆分字符串,除非使用引号('..和..')
Split string on keyword (and) except when quoted ('... 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').match(/(.*?)and/g)
但是得到
["Price=10.00 and", " Count=30 and", " Name='a and", " b mix' and"]
有人知道怎么做吗?
您的RegExp匹配过多。试试这个:
/(?:^|'b)[a-z]+=(?:'[^']+'|[^ ]+)/gi
正如你所期望的那样。
你可以在这里查看它的操作:http://regex101.com/r/pP3cG2/1
工作原理:
它会检查它是否是字符串的乞求,或者你之前是否有空格
然后,它将匹配来自组[a-z]
的至少1个字符
之后,它将匹配=
字符
最后,它将匹配字符'
,然后匹配任何不是'
的字符,然后匹配'
,或者匹配任何不是空格的字符。
为了适应使用单词and
进行拆分的要求,我制作了以下内容:
/(?:^| and )([a-z]+=(?:'[^']+'|[^ ]+))/gi
它的工作方式是完全相同(除了有'b
我有and
)。
它只是有一个捕获组,以确保它能正常工作。
尽管它在没有所有这些检查的情况下都能工作((?:^| and )?
可以安全地删除),但我还是做了O.p.说的更改。
这是一个更新的链接:http://regex101.com/r/uA2eL4/1
附带说明一下,它可以处理"不正确"格式的输入:
Price=10.00 Count=30 and Name='a and b mix'
将与Price[...]
和Name[...]
匹配Price=10.00 and Count=30 Name='a and b mix'
将与Price[...]
和Count[...]
匹配Price=10.00 Count=30 Name='a and b mix'
(无and
s)将仅与Price[...]
匹配Price and Count=30 Name='a and b mix'
("token"上没有值)将仅与Count[...]
匹配。。。
等等…
(.+?)(?:and(?=(?:[^']*'[^']*')*[^']*$)|$)
你可以试试这个。请参阅演示。
http://regex101.com/r/jI8lV7/5
正则表达式(.*?)and
的问题
1) 它将捕获到and
,而不检查它是否在引号之间。(?=(?:[^']*'[^']*')*[^']*$)
只在and
不在引号中时才考虑它。
2) 在最后一个元素之后不是and
,而是字符串的末尾。因此,您需要捕获到and|$
才能考虑所有匹配。
如果您试图匹配这些键和值对,我建议使用以下regex。
"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'"]
只需根据<space>and<space>
拆分输入字符串。
> "Price=10.00 and Count=30 and Name='a and b mix'".split(/'sand'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()
方法
- 使用“;这个“;JavaScript原型方法中的关键字
- delete关键字在全局变量上的不同行为
- 拆分单词jquery
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 将字符串拆分为数组时出现JavaScript错误
- JavaScript 中的嵌套函数和 “this” 关键字
- 在JavaScript中拆分日期字符串的更好方法是什么
- webpack代码拆分了handlerbs文件——结果是文件很大
- 如何将字符串拆分为字符,但在javascript中保留空格
- 简单地将拆分变量添加到对象中
- 换行符拆分返回“”;未定义”;
- 将字符串拆分为;只要它's不在»«
- 如何在不使用 new 关键字的情况下从函数创建对象
- Angularjs使用“;这个“;promise内的关键字回调
- 重写需要javascript中带有import关键字的语法
- 使用 JavaScript 拆分名字和姓氏
- Regex,用于从字符串中筛选关键字
- 对关键字(选择/从/在哪里/和/或)进行拆分查询
- 通过查找关键字将Javascript字符串拆分为字符串数组
- 在关键字(和)上拆分字符串,除非使用引号('..和..')