老师,如何匹配一个字符串中所有的"ab"?
程序如下所示,但是运行结果不正确。
源字符串中有英文字母、汉字、数字、空格等字符。我想匹配所有的"ab",并且求出匹配次数和每次"ab"出现的下标。应该如何实现呢?
// 源字符串 let sourceStr = "Hello, ab哇哈哈(dcsd)c v/7/4vd/34#$%^&*abv_abCXKabHD"; // 正则表达式 let regExp = /ab/; // 匹配次数 let matchTime = 0; // 当匹配结果不为null时 while (regExp.exec(sourceStr)) { ++matchTime; console.log("第" + matchTime + "次匹配:" + regExp.exec(sourceStr)); console.log("出现的下标:" + regExp.exec(sourceStr).index); }
正在回答
同学你好,老师把你的例子修改了一下,并加了注释,可以参考注释与代码理解一下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>sd</title>
</head>
<body>
<script>
// 源字符串
let sourceStr = "Hello, ab哇哈哈(dcsd)c v/7/4vd/34#$%^&*abv_abCXKabHD";
// 正则表达式
// let regExp = /ab/;
let regExp = /ab/g; //++++这里改成全局匹配++++
// 匹配次数
let matchTime = 0;
// 判断是否要循环,默认循环
let isWhile = true;
// 当匹配结果不为null时
while (isWhile) {
try {
// regExp.exec(sourceStr) 匹配第一次后,会继续往下匹配。
// 所以不要出现多次,例如while循环括号中写了regExp.exec(sourceStr),匹配了第一个ab,
// 那么循环里面再执行regExp.exec(sourceStr),则匹配了第二个ab。这样输出的时候,是从第二个开始的,
// 所以regExp.exec(sourceStr)只能写一次。
var index = regExp.exec(sourceStr).index;
// 当匹配不到的时候,获取index时会报错,所以把这一句代码放在try中,
// 当发生报错后,catch捕获错误,然后退出循环,从而让控制台不报错。
} catch (err) { //这个err是接收报错信息的,这里就不输出了。
// 跳出循环
break;
}
matchTime++;
console.log("第" + matchTime + "次匹配ab");
console.log("出现的下标:" + index);
}
</script>
</body>
</html>
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
我后来想到是这样的,不用try-catch语句也可以实现。
判断源字符串中有没有特定的的字符串,如果有,请全部找出它们,并求出其下标和总出现次数。
举例如下:
// 源字符串 let sourceStr = "I like JS and Python. When I was six years old, my father taught me Python at home." + "When I was eight, I learned JS by myself and..."; // 正则表达式(全局模式,忽略大小写) let regExp = /CPP|JS|Python/gi; // 匹配次数 let num_matchTime = 0; // 匹配结果 let str_result = regExp.exec(sourceStr); // 只要匹配结果不为null while (str_result) { // 匹配次数加1 ++num_matchTime; // 输出匹配结果 console.log("第" + num_matchTime + "次匹配:" + str_result); // 继续匹配 str_result = regExp.exec(sourceStr); } // 最后输出匹配次数 console.log("匹配次数:" + num_matchTime);
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星