regex - 正则表达式匹配单词中不包含的单个非空白字符
问题描述
我正在尝试编写一个正则表达式来匹配特定单词中不包含的单个非空白字符。我得到的最接近的是以下。
(?!word_to_discard)\b\S+\b
问题是上面的表达式匹配不是 word_to_discard 的单词,而不是单个的非空白字符。任何想法如何做到这一点?
解决方案
让我们拆分问题:
1)您需要匹配特定单词中不包含的字符。最简单的方法是使用[ ]
带有 negation的字符组^
。我们还通过\s
在字符组中添加标记来排除任何空格字符。
[^word_to_discard\s]
2) 现在,您说只需要匹配单个字符,因此您可以使用边界标记\b
来确保没有前面/下一个字母数字字符。
\b[^word_to_discard\s]\b
3) 为了匹配所有单个字符,您需要遍历所有匹配项。那是特定于语言/引擎的。例如,在 JavaScript 中,您需要/g
在 regex 模式的末尾指定参数,因此每次后续rgx.exec(text)
调用都将获得text中的下一个匹配项:
const text = "w y o r d z";
const rgx = /\b[^word_to_discard\s]\b/g;
rgx.exec(text); // Matches "y"
rgx.exec(text); // Matches "z"
rgx.exec(text); // returns null (no more matches)
推荐阅读
- java - 错误是缺少包、类和变量和方法
- laravel - Laravel 8 路由的奇怪行为
- html - (梵文字体)如何确保文本的所有部分在
- cmake - CMake - 如何正确处理可执行文件之间的依赖关系?
- javascript - Heroku-Client 模块 .delete 重新启动测功机不起作用
- python - 从 numpy 读取并保存为 las 文件
- mongodb - 我是否应该每次都关闭 AWS Lambda 函数中的 pymongo 连接,保持池大小为 1?
- angular - Ag 网格 selectionChanged 事件不起作用
- .htaccess - 为什么我用于 laravel 和 angular 的特定 .htaccess 不起作用?
- jquery - 如果填写了特定字段,如何在新选项卡中提交表单,否则正常提交?