老师,如何匹配一个字符串中所有的"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 星