gpt4 book ai didi

javascript - 使用正则表达式匹配 javascript 中的多次出现

转载 作者:行者123 更新时间:2023-11-30 05:35:16 24 4
gpt4 key购买 nike

我正在使用 Javascript 和正则表达式解析 "csv like flavor" 中的一些字符串,使用 ; 作为分隔符。到目前为止,我想出的正则表达式试图获取所有出现的模式,例如:“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.)

最佳答案

关于正则表达式,您需要了解的一点是匹配器的多次运行只会找到非重叠 目标。如果您的正则表达式捕获太多,那么您将无法通过额外的运行找到额外的匹配项。

试试这个捕获较少的正则表达式:

([^;]+?)\s+\(([^\)]*)\)

它有两个捕获组,它们捕获有趣的前缀和括号中的其他有趣的东西。请注意,您需要对结果使用 String.trim() 。这是在 Regex 101 上解释的正则表达式.

这是最终的 JavaScript 解决方案,其中包括正则表达式:

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 roundBraketsRegex = /([^;]+?)\s+\(([^\)]*)\)/g;
var matchesArray;
var i = 1;

while (matchesArray = roundBraketsRegex.exec(complexString)) {
var group1 = matchesArray[1].trim();
var group2 = matchesArray[2].trim();
console.log("Match #" + i + " [1]: '" + group1 + "' [2]: '" + group2 + "'");
++i;
}

这是运行上面的输出:

Match #1 [1]: 'interesting prefix' [2]: 'interesting inner stuff1; interesting inner stuff2; etc.'
Match #2 [1]: 'another interesting prefix' [2]: 'another interesting string 1; another interesting string 2; etc.'

希望对您有所帮助。

--乔纳森

关于javascript - 使用正则表达式匹配 javascript 中的多次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24162581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com