【问题标题】:regex with replace() for letters only带有 replace() 的正则表达式仅用于字母
【发布时间】:2020-11-19 17:26:30
【问题描述】:

我有一个输出的字符串

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 ,即整行字符串。

【问题讨论】:

    标签: javascript regex text replace


    【解决方案1】:

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

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

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

    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];
    

    (如果您知道存在这样的子字符串;如果您不确定,最好编写一些防御性的代码。)

    【讨论】:

      【解决方案2】:

      cf_input="20153 Risk"
      
      const cf_regex_character = cf_input.replace(/\d+\s/,'')
      console.log(cf_regex_character)

      str="20153 Risk"
      reg=/[a-z]+/gi
      res=str.match(reg)
      console.log(res[0])

      【讨论】:

        【解决方案3】:

        /[^a-z]+/i

        • [ 方括号 ] 表示一系列字符;具体来说,在这种情况下,az

        • 实际上i 标志表示in 区分大小写,因此也包括AZ

        • 插入符号^ 反转模式;这意味着,任何不在指定范围内的东西。

        • + 表示只要字符在该范围内,就继续向匹配中添加字符。

        • 然后停止匹配。

        实际上,这匹配了直到20153 Risk 中的空格 的所有内容。

        然后你将这个匹配替换为空字符串'',剩下的就是Risk

        const string = '20153 Risk';
        const result = string.replace(/[^a-z]+/i, '');
        console.log(result);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-30
          • 1970-01-01
          • 1970-01-01
          • 2011-04-06
          • 2016-05-24
          • 1970-01-01
          相关资源
          最近更新 更多