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

标签 javascript regex

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

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/

相关文章:

r - 如何将字符串中的括号提取到新列中

javascript - 如何使用有效的标记维护动态页面标题?

javascript - Angularjs:从另一个 Controller 中的 Controller 调用方法

javascript - edgesData.forEach 不是 Angular 中的函数

regex - 如何使用 REGEX perl 提取两个模式之间的文本

java - Java float 的正则表达式

java - 检查字符串中的特殊符号

javascript - 如何使用 React 测试库测试 HTML 内容

javascript - 如何从 JavaScript 调整 CSS 中的值?

regex - 使用 perl 正则表达式删除标签之间的字符串