JavaScript RegExp 正则表达式匹配与全局标志陷阱
作者:函数茶馆时间:2026-10-29 12:27:53浏览:114
本文通过JavaScript RegExp对象的exec与test方法,演示正则匹配的具体实现。重点解析全局标志(global)对lastIndex属性的影响,说明在循环或多次调用中因状态保留导致的匹配失败问题,并提供避免该陷阱的代码示例。
RegExp 正则匹配基础与全局标志陷阱
本文通过具体代码示例,详细介绍在JavaScript中利用RegExp对象执行正则匹配的操作流程。
<script type="text/javascript">
var matchedTimes = 0;
//Match one d followed by one or more b's followed by one d
//Remember matched b's and the following d
//Ignore case
myRe = new RegExp("d(b+)(d)", "ig");
// 等价于 myReg = /d(b+)(d)/ig;
myArray = myRe.exec("ecDBDsdbbdz"); // ecdbBdbsdbbdz
console.log("Regular Expression String: " + myRe.source);
console.log("Is global? " + myRe.global);
console.log("Ignore case? " + myRe.ignoreCase);
console.log("Is mulitiline? " + myRe.multiline);
console.log("------------------------------------------------");
logInfo(myArray, myRe);
myArray = myRe.exec("ecDBDsdbbdz");
logInfo(myArray, myRe);
function logInfo(myArray, myRe) {
matchedTimes++;
console.log("This is " + matchedTimes + " times match");
console.log("Original String: " + myArray.input);
console.log("Match Result Array: [" + myArray + "]");
console.log("The 0-based index of the match in the string: " + myArray.index);
console.log("The last matched characters: " + myArray[0]);
console.log("The parenthesized substring matches [1]: " + myArray[1]);
console.log("The parenthesized substring matches [2]: " + myArray[2]);
console.log("The index at which to start the next match: " + myRe.lastIndex);
console.log("-----------------------------------------------");
}
myRe2 = /^\w+(\d*)$/ig
console.log("myRe2: " + myRe2.source);
//console.log("myRe2 matches abc1? " + myRe2.test("abc1"));
// 加上这行跑跑看结果,因为是global匹配,所以lastIndex会改变,
//所以后面的myRe2.test("abc")当然就是false
console.log("myRe2 matches abc? " + myRe2.test("abc"));
</script>
希望本文所述对大家的javascript程序设计有所帮助。
作者最新文章
JS大数值转字符串出现科学计数法怎么办
2026-11-05 17:09:21
JS split切割后出现空字符串怎么过滤
2026-11-05 16:00:30
在 React 或 Vue 项目中封装使用 JS 节流防抖
2026-11-05 15:27:29
JavaScript中怎么将带小数的字符串转为整数?
2026-11-05 14:32:38
怎么用JavaScript策略模式重构电商促销计算逻辑?
2026-11-05 14:01:09
