全局标志仅与第一个匹配项匹配的Regexp
Regexp with global flag only matching first match
为什么:
/('[#([0-9]{8})'])/g.exec("[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]")
返回
["[#1234678]"、"[#1345678]"answers"12345678"]
我希望它能匹配所有这些数字,但它似乎太贪婪了。
[#1234678][#87654321][#56230001][#336381069][#23416459][#556435355]12345678 87654321 56233001 36381069 23416459 56435355
.exec()
就是这样工作的。要获得多个结果,请在循环中运行它。
var re = /('[#([0-9]{8})'])/g,
str = "[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]",
match;
while (match = re.exec(str)) {
console.log(match);
}
此外,外部捕获组似乎是无关的。你可能应该把它扔掉。
/'[#([0-9]{8})']/g,
结果:
[
"[#12345678]",
"12345678"
],
[
"[#87654321]",
"87654321"
],
[
"[#56233001]",
"56233001"
],
[
"[#36381069]",
"36381069"
],
[
"[#23416459]",
"23416459"
],
[
"[#56435355]",
"56435355"
]
您可以使用字符串的replace
方法来收集所有匹配项:
var s = "[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]";
var re = /'[#([0-9]{8})']/g;
var l = [];
s.replace(re, function($0, $1) {l.push($1)});
// l == ["12345678", "87654321", "56233001", "36381069", "23416459", "56435355"]
regex.exec
返回正则表达式中的组(括号中的内容)。
您要查找的函数是您在字符串match
上调用的函数。
string.match(regex)
返回所有匹配项。
"[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]".match(/('[#([0-9]{8})'])/g)
// yields: ["[#12345678]", "[#87654321]", "[#56233001]", "[#36381069]", "[#23416459]", "[#56435355]"]
编辑:
如果你只想要没有括号和#的数字,只需将正则表达式更改为/'d{8}/g
"[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]".match(/[0-9]{8}/g)
// yields: ["12345678", "87654321", "56233001", "36381069", "23416459", "56435355"]
试试这个:
var re = /'[#('d{8})']/g;
var sourcestring = "[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]";
var results = [];
var i = 0;
var matches;
while (matches = re.exec(sourcestring)) {
results[i] = matches;
alert(results[i][1]);
i++;
}
在ES2020中添加了一个新功能,matchAll开关可以完成这项工作。
相关文章:
- 而循环只设置php中输入字段中的第一个值
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- IE11中的第二个调用取消了第一个Fetch API调用
- Javascript XMLHttpRequest——只有第一个POST请求有效
- 使用javascript或angularjs特定过滤器搜索字符串中第一个img标记的json值
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- RxJS油门行为;立即获取第一个值
- Angular UI网格:如何通过第一个UI网格中的按钮使第二个UI网格可见
- 选择多个实例中的第一个
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- Lodash:返回对象的第一个键,该对象的值(即数组)中有一个给定的元素(即字符串)
- 看起来第一个console.log是'It’不太对
- 与杜兰达尔合作的第一个JavaScript项目.尝试从第三方 API 获取数据
- 节点发布错误对象的第一个“属性”
- Javascript:表单验证getElementById仅返回第一个id元素
- 仅将 CSS 规则应用于
中的第一个 ,而不分配类/ID - Javascript Regexp :如果一个字母与一个数字相邻,请添加下划线
- JS在隐藏未定义的值后仅从数组中返回第一个id的值
- 高图表,检测点是否在堆栈中的第一个
- json结果显示第一个值