如何检索JavaScript中的正则expression式的所有匹配?
我是新的正则expression式。 我试图parsing以下types的string:
[key:"val" key2:"val2"]
里面有任意键:“val”对。 我想抓住关键的名字和价值。 对于那些好奇的我试图parsing任务战士的数据库格式。 这是我的testingstring:
[description:"aoeu" uuid:"123sth"]
这是为了强调任何东西都可以在空格之外的键或值,冒号周围没有空格,值总是用双引号。 在节点中,这是我的输出:
[deuteronomy][gatlin][~]$ node > var re = /^\[(?:(.+?):"(.+?)"\s*)+\]$/g > re.exec('[description:"aoeu" uuid:"123sth"]'); [ '[description:"aoeu" uuid:"123sth"]', 'uuid', '123sth', index: 0, input: '[description:"aoeu" uuid:"123sth"]' ]
但是description:"aoeu"
也匹配这个模式。 我怎样才能让所有的比赛回来?
继续在循环中调用re.exec(s)
以获取所有匹配项:
var re = /\s*([^[:]+):\"([^"]+)"/g; var s = '[description:"aoeu" uuid:"123sth"]'; var m; do { m = re.exec(s); if (m) { console.log(m[1], m[2]); } } while (m);
试试这个jsfiddle: http : //jsfiddle.net/7yS2V/
要遍历所有匹配,可以使用replace
函数:
var re = /\s*([^[:]+):\"([^"]+)"/g; var s = '[description:"aoeu" uuid:"123sth"]'; s.replace(re, function(match, g1, g2) { console.log(g1, g2); });
这是一个解决scheme
var s = '[description:"aoeu" uuid:"123sth"]'; var re = /\s*([^[:]+):\"([^"]+)"/g; var m; while (m = re.exec(s)) { console.log(m[1], m[2]); }
这是基于lawnsea的答案,但更短。
请注意,必须设置“g”标志,以跨越调用向前移动内部指针。
str.match(pattern)
将返回所有匹配的数组。 我想这是最简单的方法。
例如 –
"All of us except @Emran, @Raju and @Noman was there".match(/@\w*/g) // Will return ["@Emran", "@Raju", "@Noman"]
基于Agus的function,但我更喜欢只返回匹配值:
var bob = "> bob <"; function matchAll(str, regex) { var res = []; var m; if (regex.global) { while (m = regex.exec(str)) { res.push(m[1]); } } else { if (m = regex.exec(str)) { res.push(m[1]); } } return res; } var Amatch = matchAll(bob, /(&.*?;)/g); console.log(Amatch); // yeilds: [>, <]
这是我的function来获得匹配:
function getAllMatches(regex, text) { if (regex.constructor !== RegExp) { throw new Error('not RegExp'); } var res = []; var match = null; if (regex.global) { while (match = regex.exec(text)) { res.push(match); } } else { if (match = regex.exec(text)) { res.push(match); } } return res; } var regex = /abc|def|ghi/g; var res = getAllMatches(regex, 'abcdefghi'); res.forEach(function (item) { console.log(item[0]); });
这是我的答案:
var str = '[me nombre es] : My name is. [Yo puedo] is the right word'; var reg = /\[(.*?)\]/g; var a = str.match(reg); a = a.toString().replace(/[\[\]]/g, "").split(','));