Javascript - Incasesensitif split () без использования toLowerCase () или toUpperCase ()

1

Я пытаюсь разбить 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 return ["nubnub","nubnub"] но результатом, который я хотел, является ["NubNub","NubNub"]

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

Благодарю.

Теги:
string

1 ответ

5
Лучший ответ

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

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)
);
  • 0
    выше работает нормально, но как, если параметр split () хранится в переменной? как spl = "labalaba" ? и выполняется как str.split("/"+spl+"/i") похоже, не работает.
  • 1
    Смотрите edit, экранируйте строку, затем передайте ее new RegExp . (если в строке нет спецсимволов, не нужно ее экранировать)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню