[英]Find all matches in string with regex in any order with Javascript
[英]Regex - find all matches in a string with conditions (javascript)
请帮助我,我是正则表达式初学者,但没有找到解决方案。
我有一个像这样的字符串:
(name:"apple",color:"red"),(name:"orange",color:"orange"),(name:"berry",color:"red",color:"black")
我想找到所有带有“颜色”条件的匹配项(名称)。 例如:
- 颜色是红色,结果是:APPLE和BERRY
- 颜色是橙色,结果是:橙色
- 颜色是黑色,结果是:BERRY
这是我尝试的方式:这列出了所有名称(苹果,橘子,浆果):
name:"(.*?)"
找到两个“条件”的匹配项:
color:"red"
但是,如果我尝试这样合并。
name:"(.*?)color:"red"
..结果是'apple'和'orange',color:“ orange”),(name:“ berry”,'
谢谢
如果可能的话,我建议使用对象而不是字符串作为输入。
但是,如果您对输入没有任何控制,则一种可能是首先将其转换为数组数组。 然后,您可以使用标准的数组操作方法(例如.filter()
和.map()
.filter()
。
var str = '(name:"apple",color:"red"),(name:"orange",color:"yellow"),(name:"berry",color:"red",color:"black")'; // sanitize input str = '[' + str.replace(/\\(/g, '[') .replace(/\\)/g, ']') .replace(/[az]+:/gi, '') + ']'; // list = [[ 'apple', 'red' ], [ 'orange', 'yellow' ], [ 'berry', 'red', 'black' ]] var list = JSON.parse(str); function getFruits(color) { return list.filter(function(o) { return o.indexOf(color) > 0; }).map(function(o) { return o[0]; }); } console.log('Red fruits are: ', getFruits("red")); console.log('Black fruits are: ', getFruits("black"));
下面是一个替代版本getFruits()
使用.reduce()
function getFruits(color) {
return list.reduce(function(a, o) {
return o.indexOf(color) > 0 ? a.concat(o[0]) : a
}, []);
}
试试看:
var regex = /\(name:"([^"]+?)"(?:,color:"[^"]*")*(?:,color:"red")(?:,color:"[^"]*")*\)/g;
参见https://regex101.com/r/hE5zQ8/4
它甚至适用于这样的字符串:
(name:"apple",color:"red"),(name:"orange",color:"yellow"),(name:"berry",color:"red",color:"black"),(name:"berry2",color:"black",color:"red",color:"brown")
这是一个查找包含颜色的所有组的正则表达式,但是名称必须在颜色之前
\(name:"([^"]*)"[^\)]*color:"red"[^\)]*\)
http://refiddle.com/refiddles/57a34ab575622d6f2c130000
对于字符串:
(name:"apple",color:"red"),(name:"orange",color:"orange"),(name:"berry",color:"red",color:"black")
您将获得两个匹配项,并且该名称位于每个匹配项的#1组中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.