要写一个简单的JS正则式, Claude和Gemini都搞不定
我要写个脚本把ahref上的DR值和外链个数抓下来, 用AI写个JS脚本
但是有的时候数字是这种2.9K格式的, 这个2.9K就是抓不出来
<span class="css-vyilnr css-rr08kv-textFontWeight css-oi9nct-textDisplay css-hnrp1e">4.9K</span>
AI又给我一个正则式: const regex = />(\d+(?:\.\d+)?[KM]?)<\/span>/gi; 但是还是没有匹配到上面的4.9K
我告诉Gemini, 这个解析不出来, 他给我如下解释
这个完全错了, 他找不到正则式规则为什么不对, 就开始说span的其他属性产生的影响,但是这个完全不可能. 我告诉他: 但是那个正则式匹配到了<span class="css-vyilnr css-rr08kv-textFontWeight css-oi9nct-textDisplay css-hnrp1e">34</span>
这个完全错了, 他找不到正则式规则为什么不对, 就开始说span的其他属性产生的影响,但是这个完全不可能. 我告诉他: 但是那个正则式匹配到了<span class="css-vyilnr css-rr08kv-textFontWeight css-oi9nct-textDisplay css-hnrp1e">34</span>
我提示他4.9能匹配, 但是4.9K无法匹配
我放弃了, AI会在这个死胡同继续死磕, 而不会尝试换一种新方法. 我想到了新思路告诉他
用这种逻辑:我先匹配 >xxxx</span> , 再把xxx里面长度大于5的排除, 再把包含除了数字/./K以外的字符的排除
用这种逻辑:我先匹配 >xxxx</span> , 再把xxx里面长度大于5的排除, 再把包含除了数字/./K以外的字符的排除
他给我了我能用的代码
const regex = />([^<]+)<\/span>/gi;
const results = [...htmlContent.matchAll(regex)]
.map(m => m[1].trim())
.filter(v => v.length <= 5)
.filter(v => /^[\d.K]+$/.test(v));
console.log(results); // ['34', '4.9K']
终于解决了这个问题
终于解决了这个问题
Comments
Post a Comment