如何编写JavaScript正则匹配前后非字母数字的编程语言名称(含C++、C#)
正则匹配含特殊字符编程语言名称的解决方案
问题原因
- 你原来使用的
\b单词边界仅匹配\w(字母、数字、下划线)和\W(非上述字符)的交界位置,C++、C#这类包含+、#非单词字符的名称,前后边界不会被\b识别,导致匹配失败 - 直接拼接编程语言名称没有做正则特殊字符转义,
+、*这类字符会被识别为正则量词,触发语法错误或匹配逻辑异常
实现步骤
- 先对要匹配的编程语言名称做正则特殊字符转义,避免特殊字符干扰匹配逻辑
// 转义正则特殊字符的工具函数 function escapeRegExp(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); }
- 用否定环视断言替代
\b实现自定义边界判断,匹配规则为:名称前后要么是字符串首尾,要么是非字母数字字符
// 逐个构造语言的匹配正则 const escapedLang = escapeRegExp(language[element]); const reg = new RegExp(`(?<![a-zA-Z0-9])${escapedLang}(?![a-zA-Z0-9])`, 'gi');
匹配效果示例
- 可以成功匹配
我会用C++写代码里的C++、C#是.NET生态的主流语言里的C# - 不会误匹配
Cpp、Csharp这类和目标语言名称连写的内容
内容的提问来源于stack exchange,提问作者EBjor
相关产品推荐
相关产品推荐

