javascript - 在 JavaScript 中使用谓词函数进行匹配

标签 javascript function parsing

注意:这是我在 StackOverflow 上的第一个问题(尽管我之前已经回答过)。如果您认为我没有澄清某些问题,请随时在评论中告诉我。

您可能听说过 JavaScript 中的 String.prototype.match() 函数,该函数在字符串中搜索与正则表达式的匹配项,并将匹配项作为 Array 对象返回。这是一个例子:

var str = "(list 1 2 foo (list nice 3 56 989 asdasdas))"
console.log(str.match(/\d+/g)) //=>["1", "2", "3", "56", "989"]

但是,我需要一个类似匹配的方法,在 JavaScript 中输入函数。该输入函数将接受原始字符串的子字符串,并输出一个 bool 值,告诉该子字符串是否有效匹配。这是预期行为的示例

    function standardFunc(substr) {
       return parseFloat(substr) !== NaN;
    }

    var str = "(list 1 2 foo (list nice 3 56 989 asdasdas))"
    console.log(str.match(standardFunc)) //=>["1", "2", "3", "56", "989"]

有没有一种简单的方法可以在 JavaScript 中模拟这种行为?

最佳答案

如果您可以设置或以某种方式识别匹配子字符串类型的边界,那么这是可能的。例如,在这里,每个匹配看起来都在单词边界处开始和结束:

function standardFunc(str) {
   return !Number.isNaN(parseFloat(str))
}

const str = "(list 1 2 foo (list nice 3 56 989 asdasdas))";
for (const match of str.matchAll(/\b.+?\b/g)) {
  if (standardFunc(match[0])) {
    console.log(match[0]);
  }
}

请注意,您需要使用 Number.isNaN 而不是使用 !== NaN

如果您不是在寻找通用解决方案,而只是寻找此特定问题的解决方案,请仅使用正则表达式来解决此问题。匹配数字后跟一个可选的小数点和更多数字:

function standardFunc(str) {
   return !Number.isNaN(parseFloat(str))
}

const str = "123.03 (list 1 2 foo (list nice 3 56 989 asdasdas))";
console.log(
  str.match(/\d+(?:\.\d+)?/g)
);

关于javascript - 在 JavaScript 中使用谓词函数进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65545698/

相关文章:

javascript - 将文件写入 Tizen 文件系统

python - 需要帮助弄清楚为什么我的字符串比较没有通过所有测试用例

java - 将String(表示十进制数)转换为long

python - 如何在 python 中围绕解析函数的闭包中创建索引

function - Haskell,如何检查回文数

parsing - 尝试使用 HPSG PET 解析器

javascript - 异步 JavaScript 渲染小部件

javascript - jquery offset属性不可读错误

javascript - 使用onclick更改图片标题

javascript - IIFE 运行函数声明和函数表达式,结果不同