JavaScript中查找不以特定字符结尾的单词实现方法

作者:代码拾荒

时间:2026-10-27

浏览:641

本文通过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,完成了!



思则得,不思则不得。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章