如何编写正则匹配提取两端为a和b且中间非字母数字的字符串
正则匹配提取首尾为a、b且中间为非字母数字字符的字符串实现方法
- 你当前使用
replace(/a\Wb/g, "")的逻辑是删除所有符合规则的子串,和你要提取保留符合规则子串的需求正好相反,自然得到的是不需要的内容。
正确实现方案
使用JavaScript的String.match()方法直接提取所有符合规则的匹配项,再拼接为目标字符串即可。
代码示例
const rawStr = 'ave a#b a2b a$b a4b a5b a-b acb'; // 版本1:匹配中间为非单词字符(非字母/数字/下划线)的场景 const result1 = rawStr.match(/a\Wb/g)?.join(' ') || ''; console.log(result1); // 输出:a#b a$b a-b // 版本2:严格匹配中间非字母、非数字(允许下划线)的场景,更贴合需求描述 const result2 = rawStr.match(/a[^a-zA-Z0-9]b/g)?.join(' ') || ''; console.log(result2); // 输出:a#b a$b a-b
逻辑说明
match()方法传入带全局标记g的正则,会返回所有匹配结果组成的数组,无匹配时返回null- 可选链
?.用于避免无匹配结果时调用join方法报错 join(' ')将匹配得到的数组合并为空格分隔的字符串- 两种正则的区别:
\W等价于[^a-zA-Z0-9_],会排除下划线;[^a-zA-Z0-9]仅排除字母和数字,允许下划线,可根据实际需求选择。
内容的提问来源于stack exchange,提问作者V1n
相关产品推荐
相关产品推荐

