我想要实现的是在数组中搜索匹配特定变量的值,然后将其替换为其他变量(这是这个词的翻译),数组值包含数字,我只需要翻译单词而不触及数字。这是一个例子。
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 页
所以它只需要翻译单词并保留数字。
我怎样才能正确地做到这一点?
最佳答案
解决这个问题的另一种可能性是找到多个被边界包围的字符并替换它们。这将是正则表达式:\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/ 中的 fiddle 的运行示例:
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);
}
如果你运行这个 fiddle ,你会看到输出:
18 pages par minute
[a-zA-Z][^0-9]+
的另一个替代方法是 [^0-9 ][^0-9]+
首先不是数字或空格的任何字符,然后是多次不是数字的任何字符。
关于javascript - 如何替换字符串中的单词并忽略字符串中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49099742/