2016-08-04 33 views
0

請幫助我,我是一個正則表達式初學者,我沒有找到解決方案。正則表達式 - 查找字符串中的所有匹配條件(javascript)

我有一個這樣的字符串:

(name:"apple",color:"red"),(name:"orange",color:"orange"),(name:"berry",color:"red",color:"black") 

我想用「色」的條件找到所有匹配(名稱)。 實施例,如果:

  • 顏色是紅色,其結果是:蘋果和BERRY
  • 顏色爲橙色,其結果是:ORANGE
  • 顏色爲黑色,結果是:BERRY

這是我試過的方式: 這將列出所有名稱(蘋果,橘子,漿果)的:

name:"(.*?)" 

這找到一個匹配的兩個 「條件」:

color:"red" 

但是,如果我嘗試這樣的組合..

name:"(.*?)color:"red" 

..結果是 '蘋果' 和「橘子」顏色:‘橙色’),(名稱:‘漿果’,」

謝謝

+3

正則表達式是不適合這份工作的工具。 –

+4

另外,最後一次我檢查,橙子是...橙色,不是黃色...... –

+0

這只是一個例子:) ..順便說一句我編輯這個:) – norbre

回答

-1

這裏是一個發現共同所有組正則表達式ntain的顏色,但是名字必須出現在顏色

\(name:"([^"]*)"[^\)]*color:"red"[^\)]*\) 

http://refiddle.com/refiddles/57a34ab575622d6f2c130000

爲字符串之前:

(name:"apple",color:"red"),(name:"orange",color:"orange"),(name:"berry",color:"red",color:"black") 

,你會得到兩個比賽和名稱是在組#1每場比賽

+0

哇..它幾乎是好的,但沒有與「黑色」 – norbre

+0

嗯讓我檢查... – HaukurHaf

+0

也許是因爲有兩個顏色「標籤」在字符串中:顏色:「紅色」,顏色:「黑色」) – norbre

2

如果可能,我建議使用一個對象而不是字符串作爲輸入。

但是,如果您對輸入沒有任何控制權,則有可能首先將其轉換爲數組數組。然後您可以使用標準的數組操作方法遍歷它,例如.filter().map()

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(/[a-z]+:/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 
    }, []); 
} 
+0

hmhm ..它也是好的,謝謝你的想法! – norbre

0

嘗試是:

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") 
相關問題