首页 > 解决方案 > 带有 replace() 的正则表达式仅用于字母

问题描述

我有一个输出的字符串

20153 Risk

我想要实现的是只获取字母,我通过使用正则表达式只获取数字来实现

const cf_regex_number = cf_input.replace(/\D/g, '');

这只会返回20153。但是,一旦我尝试只获取字母,它就会返回 while 字符串而不是Risk. 我已经完成了我的研究,并且正在使用仅获取字母的正则表达式**/^[a-zA-Z]*$/**

这是我试图只得到字母的代码行

const cf_regex_character = cf_input.replace(/^[a-zA-Z]*$/,'')

但不是返回Risk,而是返回20153 Risk,即整行字符串。

标签: javascriptregextextreplace

解决方案


您的第一个模式是定位每个非数字并将其替换为空。

另一方面,您的第二个模式只是定位模式的第一次出现,并且该模式正在寻找字符串的开头,然后是字母,然后是字符串的结尾。没有这样的序列 - 如果您从字符串的开头开始,则正好有零个字母,然后您离字符串的预期结尾很远。即使这样有效,您也在删除字母,而不是非字母。

此模式与您的第一个模式平行(删除任何出现的非字母):

const cf_regex_character = cf_input.replace(/[^a-zA-Z]/g,'')

但可能更好的方法是提取所需的子字符串,而不是删除它不是的所有内容:

const letters = cf_input.match(/[a-z]+/i)[0];
const numbers = cf_input.match(/\d+/)[0];

(这是如果您知道有这样一个子字符串;如果您不确定,最好编码得更具防御性。)


推荐阅读