【发布时间】:2014-08-01 11:46:11
【问题描述】:
我正在使用 Javascript 和正则表达式来解析 "csv like flavor" 中的一些字符串,其中; 作为分隔符。到目前为止,我想出的正则表达式正在尝试获取所有出现的 pattern,例如:“INTERESTING1 (INTERESTING2; INTERESTING3)”。
我面临的问题是我只能匹配整个字符串中上一个模式的最后一次出现,而我想匹配所有出现的模式。我已经尝试了 Javascript 函数 exec() 和 match() 有或没有一些循环,但我不知道我在做什么有什么问题?
var complexString = 'some boring stuff; some other boring stuff; interesting prefix (interesting inner stuff1; interesting inner stuff2; etc.); boring stuff; another interesting prefix (another interesting string 1; another interesting string 2; etc.)';
//var complexString = 'XXX';
// regex to apply
var roundBraketsRegex = /.*;(.*)\((.*)\)/g; // string pattern: "INTERESTING1 (INTERESTING2; INTERESTING3)"
// array of matched groups
var matchesArray = roundBraketsRegex.exec(complexString);
var outputString = '';
if(matchesArray == null ) {
outputString = 'NULL!!! ';
}
// I have tried also the following commented line with stuff related to
// while loops and functions like .exec() or .match()
//while ((matchesArray = roundBraketsRegex.match( complexString )) != null) {
outputString = outputString + ' ### ' + matchesArray[1] + ' ### ' + matchesArray[2] + ' ### NOT INTERESTED IN: ' + matchesArray[0];
//}
// print what has been found
console.log(document.getElementById('result'));
document.getElementById('result').innerHTML = outputString;
输出(我在 Stackoverflow 中手动添加了一些回车,只是为了让字符串更具可读性):
### another interesting prefix
### another interesting string 1; another interesting string 2; etc.
### NOT INTERESTED IN: some boring stuff; some other boring stuff; interesting prefix (interesting inner stuff1; interesting inner stuff2; etc.); boring stuff; another interesting prefix (another interesting string 1; another interesting string 2; etc.)
【问题讨论】:
-
不要使用贪婪的
.*,试试.*? -
是的,补充一下@hjpotter92 的说法,问题是您的正则表达式由于贪婪而一次匹配所有内容。* 如果您使用非贪婪匹配器。*?它只会匹配它需要的部分
标签: javascript regex csv pattern-matching