从字符串 JavaScript 中过滤多个正则表达式
Filter multiple regex from a string javascript
我想使用 javascript 从字符串中获取多个变量。
字符串示例:
<span var1="abc" some random thing var2="cde" another random stuff var3="efg"></span>
<span var1="abc" some random thing var2="cde" another random stuff??>
<::" var3="efg"></span>
我想得到var1
,var2
和var3
。
我只能对第一组使用此正则表达式获得的最接近的正则表达式。
span var1="(.*?)"(?:.*)var2="(.*?)"(?:.*)var3="(.*?)"(?:.*)'/span
下面是示例:例
谢谢!
编辑 请参阅正则表达式 101 演示。你可以试试:
function getVars(str) {
var reg = /var1="(.*?)".*?'n*.*?var2="(.*?)".*?'n*.*?var3="(.*?)"/g;
while (found = reg.exec(str)) {
document.write ("var1 = " + found[1] + "<br>var2 = " + found[2] + "<br>var3 = " + found[3] + "<br>" );
}
}
var str = '<span var1="abc" some random thing var2="cde" another random stuff var3="efg"></span>'n' +
'<span var1="abc" some random thing var2="cde" another random stuff??>'n' +
'<::" var3="efg"></span>';
getVars(str);
我错过了什么吗?你的代码对我有用。
请参阅以下示例:
var str = '<span var1="abc" some random thing var2="cde" another random stuf var3="efg"></span><span var1="abc" some random thing var2="cde" another random stuf??><::" var3="efg"></span>';
var re = /<span var1=["'](.*?)["'](?:.*)var2=["'](.*?)["'](?:.*)var3=["'](.*?)["'](?:.*)'/span>/;
var matches = re.exec(str).slice(1);
matches.forEach(function(match) {
document.body.insertAdjacentHTML('beforeend', match + '<br>');
});
你需要的是正则表达式的exec
方法。它允许您重复获得子比赛,在最后一场比赛后继续在位置。
我做了什么:
- 我用
regex.exec
而不是string.match
- 我添加了
g
以使正则表达式全局化 - 我把
(?:.*)
改成了.*?
,因为它太贪婪了,吃掉中间的所有内容
现在它可以工作了(jQuery仅用于输出的简单可视化):
var str = '<span var1="abc" some random thing var2="cde" another random stuf var3="efg"></span><span var1="abc" some random thing var2="cde" another random stuf??><::" var3="efg"></span>';
// Note that I added "g" to make it a global selector and changed all (?:.*) to .*?
var re = /<span var1="(.*?)".*?var2="(.*?)".*?var3="(.*?)".*?'/span>/g;
var matches;
// You can call re.exec repeatedly and it will return always the next group of results
while(matches = re.exec(str)) {
// matches will look like this: ["<span var1="abc" some random thing var2="cde" another random stuf var3="efg"></span>", "abc", "cde", "efg", index: 0, input: "<span var1="abc" some random thing var2="cde" anot…de" another random stuf??><::" var3="efg"></span>"]
// This is just for nice output
$("<span/>").text(matches[0]).appendTo("body");
$("<ul/>").append(matches.slice(1).map(function(m) {
return $("<li/>").text(m);
})).appendTo("body");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
如果你想不那么"僵硬",只寻找任何看起来像带引号的HTML属性的东西,你可以改用这个正则表达式:/'s(['w-]+)="(.*?)"/g
。
相关文章:
- 用Javascript正则表达式过滤十六进制数字
- 在 JavaScript 中使用正则表达式从字符串中过滤出百分比
- 从字符串 JavaScript 中过滤多个正则表达式
- Python 3.3 itertools映射,长度为5,由正则表达式级别过滤
- 调整 javascript 正则表达式以过滤来自 url 的变量
- 使用 Javascript 正则表达式过滤掉特殊字符
- 需要一个正则表达式来过滤掉除一个小数点之外的所有内容
- AngularJS:通过正则表达式进行过滤
- 自定义正则表达式过滤掉最后一个url路径中的ID
- 有人可以解释这个正则表达式过滤的数组
- 过滤此正则表达式中的字符
- 用于过滤src的正则表达式
- 如何在ng表中使用正则表达式进行过滤
- 使用正则表达式过滤固定长度0或4位数字的年份
- Angularjs用正则表达式过滤
- 使用RegExp动态创建正则表达式,并过滤内容
- 如何编写正则表达式来过滤掉字符串与单出现4英寸,分隔字符串数组
- Javascript正则表达式过滤字符串
- 需要带角度智能表的正则表达式过滤
- 使用正则表达式过滤掉不符合't不符合标准