关于条纹:Incasesensitif split() 而不用 toLowerCase() or toUpperCase()

Javascript - Incasesensitif split() without using toLowerCase() or toUpperCase()

我正在尝试使用split()方法拆分string,但它的工作情况比较敏感,问题的类型与标题相同。

问题是这样的

1
2
3
4
5
6
var str, ret;

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

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

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

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

ret返回["nubnub","nubnub"],但我想要的结果是["nubnub","nubnub"]

我还是不明白怎么把"nubnub"交给"nubnub"

谢谢。


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

1
2
3
4
const str ="NubNubLabaLabaNubNub";
console.log(
  str.split(/labalaba/i)
);

如果要拆分的字符串在变量中,请首先对其进行转义,然后将其传递给new RegExp

1
2
3
4
5
6
7
8
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)
);