使用JS match提取职位年薪却返回多余字符,如何修正?
解决LinkedIn薪资提取的正则问题
问题原因
你用的String.match()在正则带g全局标志时,只会返回完整匹配的字符串数组,不会提取捕获组里的内容——这是JavaScript的标准行为,和在线测试工具的显示逻辑不一样,所以才会拿到带$和/yr的结果。
三种解决办法
1. 用环视断言修改正则(最简洁)
把正则改成用正向前后断言,让完整匹配直接就是你要的薪资部分:
var payYr = $(jobItem).text().toLowerCase().trim().match(/(?<=\$).+?k?(?=\/yr)/g);
(?<=\$):确保匹配内容前面是$(不会包含到结果里)(?=\/yr):确保匹配内容后面是/yr(不会包含到结果里)- 这样
match()返回的就是纯薪资数组,比如["115k", "145k"]
2. 用matchAll()提取捕获组
matchAll()会返回包含捕获组的迭代器,转成数组后提取每个匹配的第一个捕获组:
const text = $(jobItem).text().toLowerCase().trim(); const matches = text.matchAll(/\$(.+?k?)\/yr/g); var payYr = Array.from(matches, match => match[1]);
3. 用exec()循环捕获
通过循环调用exec(),每次提取捕获组内容,直到匹配结束:
const regex = /\$(.+?k?)\/yr/g; const text = $(jobItem).text().toLowerCase().trim(); var payYr = []; let matchResult; while ((matchResult = regex.exec(text)) !== null) { payYr.push(matchResult[1]); }
内容的提问来源于stack exchange,提问作者not_a_generic_user
相关产品推荐
相关产品推荐

