【问题标题】:Regex: remove everything except the letters and separator正则表达式:删除除字母和分隔符之外的所有内容
【发布时间】:2021-07-11 22:03:45
【问题描述】:

我目前正在使用替换语句来替换字符串的某些部分。我认为我的代码有点过头,可以简化:

const locales = 'fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5'
locales = locales.replace('-','_')
locales = locales.replace(';q=','')
locales = locales.replace(/[0-9]/g,'')
locales = locales.replace('.','')

最后,我想使用正则表达式从字符串中删除除语言环境之外的所有内容,并将- 替换为_。我希望最终的字符串看起来像这样:

'fr_CH, fr, en, de, *'

【问题讨论】:

  • 出了什么问题?
  • 3 个替换是相同的。总是可以替换(/[0-9\-.]/,''),然后单独替换('-','_')。或者可以使用回调。您首先暗示非全局,但我确定您不是这个意思。

标签: javascript regex


【解决方案1】:

精心挑选的正则表达式可以在一次替换中去掉权重。第二次将连字符 - 切换为下划线 _

const locales = 'fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5';
newLocales = locales.replace(/;q=\d*\.\d*/g,'').replace(/-/g,'_');
console.log(newLocales);   //  fr_CH, fr, en, de, *

【讨论】:

    【解决方案2】:

    您可以替换和搜索两个小字符,也可以在破折号和一些大写字符或星号之后。

    const
        locales = 'fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5',
        parts = locales
            .replace(/-/g, '_')
            .match(/[a-z]{2}_*[A-Z]*|\*/g)
            .join(', ');
    
    console.log(parts);

    一种更短的方法,它替换分号(包括)之后的所有部分,直到逗号之后,而不转换/匹配到数组并连接回字符串。

    const
        locales = 'fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5',
        parts = locales
            .replace(/-/g, '_')
            .replace(/;[^,]+/g, '')
    
    console.log(parts);

    【讨论】:

      猜你喜欢
      • 2011-09-08
      • 1970-01-01
      • 2017-08-24
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 2011-10-16
      相关资源
      最近更新 更多