如何修改JS书签脚本实现LinkedIn搜索词的正则化布尔OR转换
解决LinkedIn人才搜索布尔OR格式转换的书签脚本
核心需求实现思路
要同时兼容带OR和不带OR的输入,且正确识别引号内的多词短语,关键走这三步:
- 统一分隔符:把输入里引号外的
OR(带前后空格)替换成空格,让所有术语的分隔方式统一为空格。 - 提取完整术语:用正则精准匹配出所有独立术语——既包括带引号的多词短语,也包括普通单词。
- 拼接目标格式:第一个术语直接保留,后续每个术语用
OR(术语)的格式拼接,生成LinkedNow支持的长布尔搜索串。
修正后的完整书签脚本
javascript:(function (){ // 获取页面选中的文本,无选中则为空字符串 let selectedText = ''; if (window.getSelection) { selectedText = window.getSelection().toString(); } else if (document.selection) { selectedText = document.selection.createRange().text; } // 弹出输入框,默认填充选中文本 const inputStr = prompt('输入LinkedIn搜索术语(支持空格/OR分隔,带引号的短语自动保留):', selectedText.trim()); if (!inputStr) return; // 预处理:仅替换引号外的" OR "为空格,统一分隔规则 let processedStr = inputStr.trim().replace(/(?=(?:[^"]*"[^"]*")*[^"]*$) OR /g, ' '); // 匹配所有合法术语:带引号的短语(支持转义引号)/非空格单词 const terms = processedStr.match(/"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'|\S+/g) || []; if (terms.length === 0) return; // 拼接成LinkedIn支持的格式 let searchKeywords = terms[0]; for (let i = 1; i < terms.length; i++) { searchKeywords += ` OR(${terms[i]})`; } // 跳转至LinkedIn人才搜索页面 void(location.href = `https://www.linkedin.com/search/results/people/?keywords=${encodeURIComponent(searchKeywords)}`); })();
关键细节说明
- 引号外OR替换正则:
/(?=(?:[^"]*"[^"]*")*[^"]*$) OR /g通过正向环视判断OR是否处于双引号之外,避免误替换引号内的OR(比如"front OR back end"里的OR会被完整保留)。 - 术语匹配正则:
/"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'|\S+/g会精准匹配三类内容:- 双引号包裹的多词短语(支持转义双引号,比如
"he said \"hello\"") - 单引号包裹的多词短语(同理支持转义单引号)
- 连续非空格字符(普通单词术语,比如
react、node.js)
- 双引号包裹的多词短语(支持转义双引号,比如
- 格式拼接逻辑:第一个术语直接保留原始格式,后续每个术语用
OR(术语)包裹,完全贴合LinkedIn当前支持的长布尔语法要求。
测试示例
输入:react "full stack" node.js "back end" developer
输出:react OR("full stack") OR(node.js) OR("back end") OR(developer)
输入:Keyword1 OR Keyword2 OR "keyword phrase3" OR "keyword phrase4" OR keyword5 OR keyword6
输出:Keyword1 OR(Keyword2) OR("keyword phrase3") OR("keyword phrase4") OR(keyword5) OR(keyword6)
内容的提问来源于stack exchange,提问作者Glenn Gutmacher
相关产品推荐
相关产品推荐

