【问题标题】:Javascript - Incasesensitif split() without using toLowerCase() or toUpperCase()Javascript - Incasesensitivef split() 不使用 toLowerCase() 或 toUpperCase()
【发布时间】:2019-03-30 18:23:32
【问题描述】:

我正在尝试使用split() 方法拆分string,但它区分大小写,问题与标题中输入的一样。

问题是这样的

var str, ret;

str = "NubNubLabaLabaNubNub";
ret = str.split("labalaba"); // ret return ["NubNubLabaLabaNubNub"]

// which i wanted ["NubNub","NubNub"]

当我使用toLowerCase()toUpperCase() 时,整个string 会发生变化,拆分后我希望它是原始的。

str = "NubNubLabaLabaNubNub";
ret = str.toLowerCase().split("labalaba".toLowerCase());

ret return ["nubnub","nubnub"] 但我想要的结果是["NubNub","NubNub"]

我还是不明白怎么把"nubnub"返回给"NubNub"

谢谢。

【问题讨论】:

    标签: javascript string


    【解决方案1】:

    您可以改用不区分大小写的正则表达式:

    const str = "NubNubLabaLabaNubNub";
    console.log(
      str.split(/labalaba/i)
    );

    如果要拆分的字符串在变量中,则先escape it,然后将其传递给new RegExp

    const escape = s => s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
    
    const str = "abcfoo()barabc";
    const splitOn = 'foo()bar';
    const re = new RegExp(escape(splitOn), 'i');
    console.log(
      str.split(re)
    );

    【讨论】:

    • 以上工作正常,但如果 split() 参数存储在变量中怎么办?喜欢spl = "labalaba"?并像str.split("/"+spl+"/i") 一样执行它似乎不起作用。
    • 查看编辑,转义字符串,然后将其传递给new RegExp。 (如果字符串中没有特殊字符,则无需转义)
    • 我实际上还有一些问题,如果我用splitOn = "asde"替换incase-sensitivefly的字符串是"AsdE",如何记录我们替换的string不是"AsdE" "asde""ASDE"?
    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 2015-01-08
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    相关资源
    最近更新 更多