javascript - 如何在不同的组中匹配 X 个完整的单词?
问题描述
我目前正在尝试将搜索词每侧的 X 个单词与三个匹配组进行匹配,包括该词之前的 X 个词、该词、该词之后的 X 个词。
值得注意的是,我需要这个正则表达式才能在 Javascript 中工作。
例如,如果我的完整字符串是:“你好,这是一个长句子,在某处有一个匹配的词”
如果我每边要匹配的单词的 X 数是 2 并且我的搜索词是“句子”,我希望我的正则表达式匹配返回:
- 第一组:“长”
- 第二组:“句子”
- 第 3 组:“与一个”
我尝试过使用括号来组成组,以及使用\w
简写来匹配整个单词。
这让我非常接近,匹配我想要的所有内容,但只是没有将匹配分成 3 个单独的组。
(\w+ ){0,2}(string)( \w+){0,2}
要测试的字符串:
this is my long string and i know what it is
预期成绩:
- 第一组:“我的长”
- 第 2 组:“字符串”
- 第 3 组:“和我”
解决方案
问题是您在捕获组中只有一个单词,然后您正在重复该组,因此,只有最后一次出现将被放置在捕获组中。您需要将一个单词放入非捕获组,然后将 X 个单词放入捕获组。
尝试这样的事情:
((?:\w+[ ]){2})(string)((?:[ ]\w+){2})
Javascript 示例:
const regex = /((?:\w+[ ]){2})(string)((?:[ ]\w+){2})/gm;
const str = `this is my long string and i know what it is`;
let m = regex.exec(str);
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
显然,这只会匹配目标字符串之前和之后的两个单词(如您所述)。如果您实际上打算匹配两个或更少的单词(如您的模式所示),您可以使用{0,2}
代替{2}
.
推荐阅读
- python - 如何将另一个 DataFrame 中的值添加到列匹配的行上?
- python - 检查df中是否存在多个值
- python-3.x - 如何从一组字典中生成可能组合的列表
- javascript - 使用 MCQ 问题格式的 jQuery 和 JavaScript 问题
- reactjs - 在 React 路由器 dom 导航上出现错误无法在“节点”上执行“insertBefore”?
- android - Flutter 备份用户数据
- cobol - 编写 COBOL 程序来反转记录并从一个文件移动到另一个文件的逻辑是什么?
- python-3.x - structlog 无法添加处理程序以写入文件
- statistics - 如何在 Metabase 中找到带有数字的列的众数和中位数?(Metabase 是一种 BI 工具)
- android - 将 FlutterFragment 添加到 Activity 中?