Javascript - incasesensitif split () без использования tolowercase () или touppercase ()

Я пытаюсь разделить string с помощью метода split(), но он работает с учетом регистра, вопрос такой, как указано в заголовке.

Проблема такая

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 возвращает ["nubnub","nubnub"], но результат, который я хотел, - ["NubNub","NubNub"]

До сих пор не понимаю, как вернуть "nubnub" в "NubNub"

Спасибо.

2
0
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо этого вы можете использовать регулярное выражение без учета регистра:

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

Если строка для разделения находится в переменной, сначала избежать этого, затем передайте ее в 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"), похоже, не работает.

Irvan Hilmi 26.10.2018 06:01

Смотрите редактирование, экранируйте строку и передайте ее в new RegExp. (если в строке нет специальных символов, то экранировать ее не нужно)

CertainPerformance 26.10.2018 06:04

У меня на самом деле есть еще вопрос: если строка, которую я заменяю в случае чувствительности к регистру, это "AsdE" на splitOn = "asde", как записать string, который мы заменяем, это "AsdE", а не "asde" или "ASDE"?

Irvan Hilmi 26.10.2018 07:40

Другие вопросы по теме