我想要实现的是在数组中搜索值,如果它匹配特定变量,然后将其替换为其他变量(这是该单词的翻译),数组值包含数字,我只需翻译单词触摸号码。这是一个例子。
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&#39>
所以它只需翻译单词并保留数字。
我该怎么做呢?
答案 0 :(得分: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);
}
&#13;
如果你运行这个小提琴,你会看到输出:
18 pages par minute
[a-zA-Z][^0-9]+
的另一种替代方法是[^0-9 ][^0-9]+
,它可以找到任何首先不是数字或空格的字符,然后找到多次不是数字的任何字符。
答案 1 :(得分:1)
您只将单个字符与[^0-9 ]
匹配。我怀疑你想要[^0-9 ]+
。
答案 2 :(得分: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);
}
&#13;