1

我正在编写一个 JavaScript 应用程序,我正在解析用户输入,其格式为“书中的书名位置”。

可能的输入示例:

  • 第一本书Ch。2
  • 文本 Pg 的专着。3
  • 不同的法典 5:4

我有一个大约 5000 个可能的书名的列表,每个书名都有多种变体,说明书中位置的格式。由于书名总是第一位的,我想通过书名搜索找到与输入匹配的书,然后解析输入的其余部分。以下哪种方法更有效:

选项1

var input = "The First Book Ch. 2";
var books = [
  "The First Book",
  "A Monograph of Text",
  //5000 more entries
];
var regex = new RegExp("^" + books.join("|"));
var isMatch = input.match(regex);

选项 2

var input = "The First Book Ch. 2";
var books = [
  "The First Book",
  "A Monograph of Text",
  //5000 more entries
];
var regex = new RegExp("^" + books.join("|"));
var isMatch = false;
for ( var i = 0; i < books.length; i++ ) {
  if ( input.startsWith( books[i] ) ) {
    isMatch = true;
    break;
  }
}

两个问题:

  • 在前端应用程序(在用户的浏览器中运行)中,哪个更快,选项 1,选项 2,还是有第三种更快的选项?
  • 我还有一个后端应用程序(在 Node.js 中运行),我需要在其中解析大文本(约 500,000 个字符或更多),并且对于文本中的每个括号,我需要执行此匹配(例如,大约 2,000- 3,000 个字符串以匹配书籍列表)。对于这个用例,最有效的选择是什么?
4

1 回答 1

0

您可以使用性能API衡量代码的执行情况。

const t0 = performance.now();
console.log(runCodeToMeasure());
const t1 = performance.now();

console.log('Took ', (t1 - t0).toFixed(4), ' milliseconds to run.');
于 2020-03-30T09:24:31.230 回答