0

我需要匹配所有条目,如 { * } 字符串(使用 Javascript)。我该怎么做?

这是一个输入:"#SD#{date};{time};{lat1};{lat2};{lon1};{lon2};{speed};{course};{height};{sats}\r\n";

提前致谢

4

3 回答 3

3

使用正则表达式可能:

var r = /{.*?}/g;
var s = "#SD#{date};{time};{lat1};{lat2};{lon1};{lon2};{speed};{course};{height};{sats}\r\n";
var matches = s.match(r);

或者,如果您想在结果中去除那些 {},您可以运行 .exec() 循环来仅获取捕获的数据:

var r = /{(.*?)}/g;
var s = "#SD#{date};{time};{lat1};{lat2};{lon1};{lon2};{speed};{course};{height};{sats}\r\n";
var matches = [];
var match = null;

while(match = r.exec(s)) {
    matches.push(match[1]);
}
于 2013-07-08T20:39:43.287 回答
2

您可以尝试使用以下正则表达式:

var str = "#SD#{date};{time};{lat1};{lat2};{lon1};{lon2};{speed};{course};{height};{sats}\r\n".
var m = str.match(/{.*?}/g);

你会在里面找到所有的匹配项m

进一步参考:http ://www.w3schools.com/jsref/jsref_match.asp

于 2013-07-08T20:39:51.380 回答
2

对于括号内的文本,您应该能够使用此模式:

var pattern = new RegExp("([^{|^}]+)(?=})", "g");
var testString = "#SD#{date};{time};{lat1};{lat2};{lon1};{lon2};{speed};{course};{height};{sats}\r\n";
var bracketTextArray = testString.match(pattern);

bracketTextArray变量将是一个包含以下值的数组:

"date", "time", "lat1",  "lat2", "lon1", "lon2", "speed", "course", "height", "sats"

{正则表达式匹配除and }(即这部分:)之外的任何一个或多个字符的每次出现,([^{|^}]+)其后紧跟一个}字符(即这部分:)(?=})。RegExp 定义中的"g"使模式“贪婪”,因此它会找到所有出现的地方。

于 2013-07-08T20:53:51.113 回答