代码之家  ›  专栏  ›  技术社区  ›  Andrew

如何替换字符串中的单词并忽略字符串中的数字

  •  1
  • Andrew  · 技术社区  · 8 年前

    我试图实现的是在数组中搜索与特定变量匹配的值,然后用其他变量替换它(这是对这个单词的翻译),数组值由数字组成,我只需要翻译单词,而不需要接触数字。这里有一个例子。

    var arr = ["18 pages"];
    var item = "18 pages";
    var translate = "pagina's";
    
    if(arr.indexOf(item) !== -1) {
        arr[0] = arr[0].replace(/[^0-9 ]/, translate);
        alert(arr);
    }
    

    输出为: 18 pagina'sages

    预期产量:18 pagina

    所以它只需要翻译单词和保留数字。

    我怎样才能做好呢?

    3 回复  |  直到 8 年前
        1
  •  2
  •   gil.fernandes    8 年前

    解决此问题的另一种可能性是找到多个被边界包围的字符并替换这些字符。这将是正则表达式: \b[a-zA-Z]+\b 。以下是一个可执行示例:

    let arr = ["18 pages"];
    let item = "18 pages";
    let translate = "pagina's";
    
    if (arr.indexOf(item) !== -1) {
      arr[0] = arr[0].replace(/\b[a-zA-Z]+\b/, translate);
      console.log(arr);
    }

    如果运行此代码段,您将获得预期的输出: 18 pagina's 。

    更新时间:

    另一种选择是先匹配一个字符,然后匹配除数字以外的任何字符( [a-zA-Z][^0-9]+ )将能够替换更复杂的表达式,而不仅仅是一个单词。

    下面是一个基于小提琴的运行示例 https://jsfiddle.net/9uta5bo4/2/ :

    let arr = "18 pagina’s per minuut";
    let item = "pagina’s per minuut";
    let translate = "pages par minute";
    
    if (arr.indexOf(item) !== -1) {
      arr = arr.replace(/[a-zA-Z][^0-9]+/, translate);
      console.log(arr);
    }

    如果运行此小提琴,您将看到输出:

    18 pages par minute
    

    另一种替代方案 [a-zA-Z][^0-9]+ 是 [^0-9 ][^0-9]+ 它首先查找任何不是数字或空格的字符,然后多次查找任何不是数字的字符。

        2
  •  1
  •   kshetline    8 年前

    你只匹配了一个字符 [^0-9 ] 。我怀疑你想要 [^0-9 ]+ 。

        3
  •  0
  •   Mohammed Elhag    8 年前

    let arr = ["18 pages"];
    let item = "18 pages";
    let translate = "pagina's";
    if (arr.indexOf(item) !== -1) {
      var res = arr[0].replace(/[a-zA-Z]+/g, translate); //replace only letters
      var res2 = arr[0].replace(/[^0-9|\s]+/g, translate); // ecxlcude numbers and space 
      var res3 = arr[0].replace(/[^\d|\s]+/, translate); // ecxlcude numbers and space 
      console.log(res);
      console.log(res2);
      console.log(res3);
    
    }