JavaScript中查找不以特定字符结尾的单词实现方法
本文通过JavaScript代码示例,演示如何查找以特定字符开头或结尾的单词。重点解决JavaScript正则不支持逆环视的问题,采用匹配后替换删除的策略,实现查找不以特定字符结尾的单词功能。
首先,需要说明的是,在撰写本文之前,作者花费了超过两个小时来调试正则表达式,过程颇为艰辛。
JavaScript中正则表达式查找单词的示例
按照常规思路,我们先来看看其他几种查找方式。这里以字符串
代码如下:
var str = "eattd gebcat gedat jadu geat beu"; 为例。
1. 查找以"ge"开头的单词,预期结果应为"gebcat"、"gedat"和"geat"。由于这些单词以"ge"开头,我们可以将它们放入一个新数组中供后续使用。
代码如下:
var exp1 = /\bge\w+/ig;
var matchedStr = exp1.exec(str);
while (matchedStr != null && matchedStr.index < str.length) {
if (matchedStr[0] != null) {
inv.innerHTML += "<br>The result is: " + matchedStr[0];
//newStr = newStr.replace(matchedStr[0]);
wordsArr.push(matchedStr[0]);
}
matchedStr = exp1.exec(str);
} 2. 查找以"at"结尾的单词,结果应为"gebcat"、"gedat"和"geat"。同样,我们可以将这些结果放入数组中。
代码如下:
var exp1 = /\w+(at\b)/ig; 3. 查找不以"ge"开头的单词,我们需要使用另一个数组来存放结果。
代码如下:
var exp1 = /\b(?!ge)\w+/ig;
var wordsArr = new Array();
var matchedStr = exp1.exec(str);
while (matchedStr != null && matchedStr.index < str.length) {
if (matchedStr[0] != null) {
inv.innerHTML += "<br>The result is: " + matchedStr[0];
newStr = newStr.replace(matchedStr[0]);
wordsArr.push(matchedStr[0]);
}
matchedStr = exp1.exec(str);
}
//wordsArr = newStr.split(" ");
for (var i = 0; i < wordsArr.length;) {
if (wordsArr[i] == "undefined") {
wordsArr.splice(i,1);
} else
i++
} 4. 查找不以"at"结尾的单词,这里遇到了问题。JavaScript中的正则表达式能力相对有限,不支持逆环视否定(negative lookbehind),因此无法直接编写如下代码:
代码如下:
var exp1 = /\w+(?<!at\b)/ig; 而
代码如下:
var exp1 = /\w+(?!at\b)/ig; 的含义是单词结尾右侧不能为"at",这显然是不可能的,因为\b\w用于查找单词边界。因此,我们换一种思路:先找到以"at"结尾的单词,将其从原字符串中删除,然后将剩余部分放入新数组。
代码如下:
function RegularExpTest() {
var inv = document.getElementById("RegexTest");
var str = "eattd gedbcat gedat jadu geat beu";
var newStr = str;
var exp1 = /\w+at\b/ig;
var wordsArr = new Array();
var matchedStr = exp1.exec(str);
while (matchedStr != null && matchedStr.index < str.length) {
if (matchedStr[0] != null) {
inv.innerHTML += "<br>The result is: " + matchedStr[0];
newStr = newStr.replace(matchedStr[0]);
}
matchedStr = exp1.exec(str);
}
wordsArr = newStr.split(" ");
for (var i = 0; i < wordsArr.length;) {
if (wordsArr[i] == "undefined") {
wordsArr.splice(i,1);
} else
i++
}
inv.innerHTML += "<br>The result is: " + wordsArr;
} OK,完成了!
思则得,不思则不得。
JavaScript异步发送HTTP请求时怎么优雅地处理错误
2026-11-05 17:10:44
5款主流JS在线运行工具对比:CodePen、JSFiddle与StackBlitz怎么选
2026-11-05 17:04:04
JavaScript入门书籍避坑:这些书不适合初学者
2026-11-05 16:31:15
JS使用Math.round实现保留两位小数的原理与代码
2026-11-05 15:35:55
JavaScript 原生 Date 对象怎么实现日期加减
2026-11-05 14:30:00
