我正在编写一个 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 个字符串以匹配书籍列表)。对于这个用例,最有效的选择是什么?