JS截取指定字符前/中/后字符的方法

2018-08-23 | 6,272浏览 | 0评论 | 标签:无

JS截取指定字符串前中后的方法

字符串操作大家应该会经常遇到,今天试着写了一个通用的字符串匹配方法,基本能用,记这里备忘。

使用场景

截取指定字符串前/中/后的字符,可匹配多个。

源码

<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.虽然已对特殊字符进行了处理,但有些字符防不胜防,需要注意一下。

(本篇完。有疑问欢迎留言探讨)

留言:

*

* (方便回复通知)

打赏
编辑代码 运行结果
退出