JS截取指定字符前/中/后字符的方法
2018-08-23 | 6,152浏览 | 0评论 | 标签:无
字符串操作大家应该会经常遇到,今天试着写了一个通用的字符串匹配方法,基本能用,记这里备忘。
使用场景
截取指定字符串前/中/后的字符,可匹配多个。
源码
<script>
String.prototype.stringMatch = function(templ, key,innerReg) {
var str = this,
keys = [],
res = {},
regs = {
divide: /\$\{([^\}]*)\}/g,
sensitive: /\?|\=|\<|\>|\^|\$|\*|\(|\)|\||\{|\}|\[|\]/g,
blank: /\r|\n|\t/g
},
nearby = templ.replace(regs.divide, function($0, $1) {
keys.push($1)
return ','
}).split(','),
trimSens = function(s) {
return s.replace(regs.sensitive, function($0) {
return '\\' + $0;
})
};
for (var i = 0; i < keys.length; i++) {
var reg = new RegExp("(?<=" + trimSens(nearby[i] || '') + ")" + (innerReg || ".*") + "(?=" + trimSens(nearby[i + 1] || '') + ")", "mg"),
val = str.replace(regs.blank, '').match(reg);
if (val) {
res[keys[i]] = val[0];
}
}
return key ? res[key] : res;
};
//测试:
var str="字符串操作大家应该会经常遇到",
teml="字符串操作${key1}应该会${key2}遇到",
res=str.stringMatch(teml);
document.write(JSON.stringify(res)); // => {key1:"大家",key2:"经常"}
</script>
使用方法
场景一:路由参数获取
var str="https://denghao.me/a/hello.html?v=100",
teml="https://denghao.me/a/${name}.html?v=${version}",
res1=str.stringMatch(teml);
console.log(res1); // => {name:"hello",version:"100"}
场景二:网页源码解析
var str=`
<!DOCTYPE html>
<head>
<title>微信小程序“拍照识图”上线</title>
</head>
<body>
... ...
</body>
</html>
`;
teml="<title>${title}</title>",
res=str.stringMatch(teml);
console.log(res); // => {title:"微信小程序“拍照识图”上线"}
2020.12.24更新
添加了innerReg参数,用于自定义中间部分的匹配规则。可解决某些情况下截取异常的问题。
总结
1.原理是以关键词两边字符为基准进行截取,因此两边字符串的唯一性决定匹配精度。
2.虽然已对特殊字符进行了处理,但有些字符防不胜防,需要注意一下。
(本篇完。有疑问欢迎留言探讨)
热门文章
- 微信小程序“拍照识图”上线(62,981)
- YouTube评论翻译插件《油管评论翻译机》上线了(57,023)
- 基金助手--chrome浏览器插件(43,582)
- 拍照识别彩票结果在线工具(31,301)
- vue+tabs动态组件方案漫谈(25,957)
- 《油管评论翻译机》使用说明书(23,681)
- 网页打印插件Print.js(23,441)
- 自用YouTube抓取评论+翻译工具(22,649)
- px转rem/vw方法小结(17,416)
- YouTube评论导出免费在线工具(16,638)