如果我在这样的Javascript中有一个字符串:
var html = '"<div class="info" id="infobox">Average Speed: 83kph<br/><br/>Max Speed: 95kph<br/><br/>Event Started At: 42.929126, -78.834093<br/><br/>Event Last Recorded At: 42.920754, -78.843596<br/><br/>Event Duration: 0H, 0M, 56S <br/><br/>";
我想在':'之后存储所有子字符串,我如何使用match()
方法执行此操作?我想我想要一个正则表达式为':%indeterminateAmountofCharacters&lt;'的东西。
我希望冒号/空格是开头,然后是'&lt;'作为结束的指标,我想将其中的所有内容保存为match()
将返回的数组中的元素。
Ie. ['83kph', '95kph', '42.929126, -78.834093', '0H, 0M, 56S ']
答案 0 :(得分:1)
听起来你想要一个这样的模式:
/: (.*?)</
这将匹配一个:
字符,后跟空格,后跟零个或多个任何字符,非贪婪地,在第1组中捕获,后跟一个<
字符。
不幸的是,使用此方法调用.match
只会返回第一个匹配项:
html.match(/: (.*?)</) // [": 83kph<", "83kph"]
添加全局标记(g
)将为您提供所有匹配,但不会按组分隔:
html.match(/: (.*?)</g)
// [": 83kph<", ": 95kph<", ": 42.929126, -78.834093<", ": 42.920754, -78.843596<", ": 0H, 0M, 56S <"]
一种解决方案是使用.split
,然后.filter
使用其他所有元素,如下所示:
html.split(/: (.*?)</).filter(function(x, i) { return i % 2 ; });
// ["83kph", "95kph", "42.929126, -78.834093", "42.920754, -78.843596", "0H, 0M, 56S "]
或在循环中使用.exec
:
var re = /: (.*?)</g,
results = [],
match;
while (match = re.exec(html)) {
results.push(match[1]);
}
console.log(results);
// ["83kph", "95kph", "42.929126, -78.834093", "42.920754, -78.843596", "0H, 0M, 56S "]
答案 1 :(得分:1)
您可以进行全局“搜索,不要替换”。但是,您必须半手动执行子组捕获。
var matches = [];
html.replace(/: (.*?)</g, function () {
matches.push(arguments[1]);
});
答案 2 :(得分:0)