【JavaScript String对象方法】字符串片段提取:slice()、substring()、substr()

    技术2024-05-30  97

    当参数相同时,返回结果是否相同

    slice()substring()substr()单正参✅✅✅单负参✅❌(负参转换为 0,返回全字符串)✅双正参✅✅❌双负参✅null(负参转换为 0,返回空字符串)null(第二参不能为负参,转换为 0,返回空字符串)左正右负✅❌(负参转换为 0)null(第二参不能为负参,转换为 0,返回空字符串)左负右正null(左参 > 右参,返回空字符串)✅❌

    左参能否大于右参

    slice()substring()substr()❌✅✅当左参大于右参时,返回空字符串当左参大于右参时,颠倒参数位置即:substring(10, 5) => substring(5, 10)左参为下标,右参为长度,两者不冲突

    文章目录

    测试字符串提取相同片段(参数对比)设置相同参数(结果对比)单负参 (-6)双正参 (6, 10)双负参 (-10, -5)左正右负 (5, -10)左负右正 (-10, 5) 同参同结果单正参 常见应用场景:JSON格式字符串数据去除花括号


    测试字符串

    var str = “Hello_World!_I’_love_JavaScript!”;

    下划线占用空格,便于观察对比。字符串长度为32。

    提取相同片段(参数对比)

    PS: 1.提取 'World!_I'_love' 片段,长度: 14 2. W 为第   7  个字符,下标:  6   e  为第  20 个字符,下标: 19 slice(6, 20):提取下标 6 (含)至下标 20 (不含)之间的字符数学区间表示:[6,20)左开右闭区间substring(6, 20):提取下标 6 (含)至下标 20 (不含)之间的字符数学区间表示:[6,20)左开右闭区间【同 slice()】substr(6, 14):提取从下标 6 开始算的14个字符数学区间表示:第二个参数表示的是需要截取的长度,所以无法区间表示

    设置相同参数(结果对比)

    单负参 (-6)

    slice(-6):等同于:slice(str.length-6)等同于:slice(str.length-6, str.length)提取下标 str.length-6 (含) 至最末下标之间的字符数学区间表示:[str.length-6,str.length)左开右闭区间substring(-6):注意:不支持负参,会自动将负参转换成 0!等同于:substring(0)等同于:substring(0, string.length)substr(-6):等同于:substr(str.length-6)等同于:substr(str.length-6, 6)提取从下标 6 开始算,剩余的字符注意:虽然 substr(str.length-6, str.length) 也能取得相同结果,但是,它第二个参数主要指定的是需要截取的长度而不是字符串下标!

    双正参 (6, 10)

    slice(6, 10):提取下标 6 (含)至下标 10 (不含)之间的字符数学区间表示:[6,10)左开右闭区间substring(6, 10):提取下标 6 (含)至下标 10 (不含)之间的字符数学区间表示:[6,10)左开右闭区间【同 slice()】substr(6, 10):提取从下标 6 开始算的10个字符数学区间表示:第二个参数表示的是需要截取的长度,所以无法区间表示

    双负参 (-10, -5)

    slice(-10, -5):等同于:slice(str.length-10, str.length-5)注意:第二个参数,不能小于第一个参数substring(-10, -5):注意:不支持负参,会自动将负参转换成 0!等同于:substring(0, 0)substr(-10, -5):注意:无效,第二参为长度,不支持负数,自动转换成 0!等同于:substr(-10, 0)【0长度,所以为空】等同于:substr(str.length-10, 0)

    左正右负 (5, -10)

    slice(5, -10):等同于:slice(5, str.length-10)str.length-10 = 32-10 = 22;左参 < 右参,所以可以当 左参 > 右参 时(无效)substring(5, -10):等同于:substring(5, 0)【可逆向】等同于:substring(0, 5)substr(5, -10):注意:无效,第二参为长度,不支持负数,自动转换成 0!等同于:substr(5, 0)【0长度,所以为空】

    左负右正 (-10, 5)

    slice(-10, 5):等同于:slice(str.length-10, 5),左参比右参大,无效除非左参比右参小(32-10=22;右参 > 22)substring(-10, 5):注意:负参无效化,自动将负参转换成 0。等同于:substring(0, 5)substr(-10, 5):等同于:substr(str.length-10, 5)因为第一个参数是下标,所以可为负参

    同参同结果

    单正参

    slice(6):等同于:slice(6, str.length)数学区间表示:[6,str.length)substring(6):等同于:substring(6, str.length)数学区间表示:[6,str.length)substr(6):等同于:substr(6, 26)注意:虽然 substr(6, str.length) 也能取得相同结果,但是,它第二个参数主要指定的是需要截取的长度而不是字符串下标!

    常见应用场景:JSON格式字符串数据去除花括号

    slice(1, str.length-1):substring(1, str.length-1):substr(1, str.length-2):
    Processed: 0.044, SQL: 9