如果选择使用regex/backreferences替换,或者使用split/replace

Given the choice of using replace with regex/backreferences or split/replace, which would you choose?

本文关键字:或者 split replace 替换 regex 如果 backreferences 选择      更新时间:2023-09-26

如果我想获取URI查询字符串的相关部分,我可以选择使用这两种方法中的任何一种,这两种都有效。这可能不值得纠结,但如果有选择,你会选择这些方法中的哪一种,为什么?

A)

var PN = this.href.replace(/.*&partNum=(.*)&partName=.*/, '$1');
var PName = this.href.replace(/.*&partName=(.*)&class=.*/, '$1');  

B)

var hrefSplit = this.href.split('&');
var PN = hrefSplit[1].replace('partNum=', '');      
var PName = hrefSplit[2].replace('partName=', '');

我不认为我会使用它们中的任何一个,它们都过于依赖查询字符串的格式。(想想如果查询字符串在partNum之前有partName会发生什么。)这类事情通常是等待发生的维护麻烦。

相反,我会将查询字符串转换为一个映射(为此使用一个集中式函数),然后检索映射的相关部分。

根据参数顺序,两者都是危险的,您应该这样解析:

var num = url.match(/'WpartNum=('w*)/)[1];
var name = url.match(/'WpartName=('w*)/)[1];

var pNum = /'WpartNum=('w*)/.exec(url)[1];
var pName = /'WpartName=('w*)/.exec(url)[1];