gpt4 book ai didi

javascript - 正则表达式解析多个单独的单词并忽略双引号

转载 作者:行者123 更新时间:2023-12-03 07:50:37 25 4
gpt4 key购买 nike

我正在尝试解析类似于下面的字符串。这代表对一本书的查询。有多个选项可用于查找特定字段,因此 intitle: 专门查找书名中的内容。我有两个问题。

  1. 它不会解析第三个返回元素中的某些术语,例如 inauthor 和 inpublisher - 'champ inauthor:"john smith"inpublisher:"the book place"' - 这可能与中的双引号有关字符串?
  2. 如何使用双引号将其变成单个术语?

JSFiddle example

字符串:

basketball intitle:champ inauthor:"john smith" inpublisher:"the book place" subject: fiba isbn: 12345 lccn: 689778 oclc: 1234156

我的尝试

let q: string = `basketball intitle:champ inauthor:"john smith" inpublisher:"the book place" subject: fiba isbn: 12345 lccn: 689778 oclc: 1234156`;
console.log(q);
q = q.replaceAll(`: `, `:`);
console.log(q);
let all = q.split(
/(\bintitle:\b|\binauthor:\b|\binpublisher:\b|\bsubject:\b|\bisbn:\b|\blccn:\b|\boclc:\b)/,
);
console.log(all);
[
'basketball ',
'intitle:',
'champ inauthor:"john smith" inpublisher:"the book place" ',
'subject:',
'fiba ',
'isbn:',
'12345 ',
'lccn:',
'689778 ',
'oclc:',
'1234156'
]

最佳答案

正如注释中提到的 :\b 不会匹配 :" 因为冒号后面没有分词符。

我建议使用 matchAll 并显式匹配引号中的部分。例如:

const q = `basketball intitle:champ inauthor:"john smith" inpublisher:"the book place" subject: fiba isbn: 12345 lccn: 689778 oclc: 1234156`;

const matches = q.matchAll(/\s*(?:(\w+):\s*)?(?:"([^"]+)"|(\S+))/g);
const obj = Object.fromEntries(
Array.from(matches, ([, key, val1, val2]) => [key ?? "__main", val1 ?? val2])
);
console.log(obj);

关于javascript - 正则表达式解析多个单独的单词并忽略双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77211554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com