如何用JavaScript正则表达式提取带前后缀的目标字符串?
使用正则匹配目标文本并获取前后各2个字符
完全可以做到!针对你给出的示例,我们可以通过构造合适的正则表达式来实现需求,下面是具体的实现方案:
静态目标文本的情况
如果你的目标文本是固定的(比如示例中的foobar),可以直接使用下面的正则:
const longText = 'yo this is a foobar string man'; const matchResult = longText.match(/.{0,2}foobar.{0,2}/)[0]; console.log(matchResult); // 输出: 'a foobar s'
正则说明:
.{0,2}:匹配最多2个任意字符({0,2}表示允许0到2次匹配,这样即使目标文本在字符串开头/结尾,也不会出现匹配失败的情况)foobar:你要查找的目标文本- 整个表达式会匹配目标文本加上它前后各0-2个字符的内容
动态目标文本的情况
如果你的目标文本是变量(比如示例中的textToFind),需要先转义目标文本中的正则特殊字符(比如., *, +等),避免正则解析出错,代码如下:
const longText = 'yo this is a foobar string man'; const textToFind = 'foobar'; // 转义正则特殊字符的工具函数 function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } // 构造动态正则 const regex = new RegExp(`.{0,2}${escapeRegExp(textToFind)}.{0,2}`); const matchResult = longText.match(regex)[0]; console.log(matchResult); // 输出: 'a foobar s'
额外说明:
- 如果你的字符串包含换行符,想要匹配换行的话,可以给正则加上
s修饰符(ES2018+支持),比如:new RegExp(..., 's'),这样.就能匹配换行符了 - 如果目标文本在字符串中出现多次,
match()默认只会返回第一个匹配结果,想要获取所有匹配的话,可以给正则加上g修饰符,此时match()会返回所有匹配的数组
内容的提问来源于stack exchange,提问作者FERN
相关产品推荐
相关产品推荐

