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

问题描述 投票:1回答:3

我想要实现的是在数组中搜索值,如果它匹配特定变量,然后将其替换为其他变量(这是该单词的翻译),数组值包含数字,我只需翻译单词而不接触数字。这是一个例子。

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's

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

我怎么能正确地做到这一点?

javascript regex
3个回答
2
投票

解决这个问题的另一种可能性是找到被边界包围的多个字符并替换它们。这将是正则表达式:\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]+,它首先找到任何不是数字或空格的字符,然后找到多次不是数字的任何字符。


1
投票

你只是将一个角色与[^0-9 ]匹配。我怀疑你想要[^0-9 ]+


0
投票

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

}
© www.soinside.com 2019 - 2024. All rights reserved.