【问题标题】:Javascript ES5: Find string in array which matches pattern [closed]Javascript ES5:在数组中查找与模式匹配的字符串[关闭]
【发布时间】:2020-05-25 08:03:39
【问题描述】:

我需要帮助查找与字符串数组中的特定模式匹配的字符串

例如

var array = ['hello there heretic', "purge the alien", "FOR THE EMPEROR!!" ]

如果我想通过以下 2 个不同的场景找到它,我将如何获取 “FOR THE EMPEROR!!”:

  1. 获取数组中以"FOR"

  2. 开头的字符串
  3. 在包含 "EMPEROR"

  4. 的数组中抓取字符串

不过,它们需要是 ES5 或更低版本。

【问题讨论】:

  • ES5 要求的任何具体原因?
  • 应该区分大小写吗?
  • 显示您尝试过的内容以及遇到的问题

标签: javascript arrays string match


【解决方案1】:

您可以使用 RegEx 来检查给定的字符串是否符合要求。像这样,

var regEx = /(^FOR)|(.*EMPEROR.*)/i;
var array = ['hello there heretic', "purge the alien", "FOR THE EMPEROR!!" ]

array.filter(function(str) { return regEx.test(str) }) // ["FOR THE EMPEROR!!"]

对于区分大小写的删除 i 正则表达式:/(^FOR)|(.*EMPEROR.*)/

var regEx = /(^FOR)|(.*EMPEROR.*)/i;
var array = ['hello there heretic', "purge the alien", "FOR THE EMPEROR!!", "For the champion", "And the EMPEROR" ]

const result = array.filter(function(str) { return regEx.test(str) })
console.log({result})

【讨论】:

  • 这在 ES5 中不起作用,因为你不能对函数使用 => 语法
  • 更新了函数语法
【解决方案2】:

如果需要支持低版本IE,请使用indexOf代替 includes.

let array = ['hello there heretic', "purge the alien", "FOR THE EMPEROR!!"];

console.log(array.filter( function(el) {
    return el.indexOf("EMPEROR") > -1 && el.split(" ")[0] == "FOR"
}))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    相关资源
    最近更新 更多