Jak zachovat oddělovače ve výsledku String.prototype.split()

Dnes jsem našel malý JavaScriptový klenot, který se může v budoucnu hodit. Řetězcovou metodu split() pravděpodobně znáte .

Zavolejte jej na řetězec, definujte oddělovač a přijměte pole jeho podřetězců.

const string = "Hello party people!";
console.log(string.split(' '));
// Array(3) [ "Hello", "party", "people!" ]

První funkční parametr, oddělovač, může být řetězcová hodnota, ale také regulární výraz. Pomocí regulárního výrazu můžete rozdělit původní řetězec v závislosti na různých oddělovačích.

const string = "Hello_party-people!";
console.log(string.split(/[-_]/));
// Array(3) [ "Hello", "party", "people!" ]

Bez ohledu na to, zda je vaším oddělovačem řetězcová hodnota nebo regulární výraz, jeho hodnota obvykle není zahrnuta ve výsledném poli. MDN uvádí tuto funkci takto:

Po nalezení separator je z řetězce odstraněn a podřetězce jsou vráceny v poli.

Zde je však drobnost JavaScriptu:pokud jako oddělovač použijete regulární výraz a tento regulární výraz zahrnuje zachycení paratezí (( a ) ), odpovídající hodnoty jsou zahrnuty do výsledku. 😲

const string = "Hello_party-people!";
console.log(string.split(/([-_])/));
// Array(5) [ "Hello", "_", "party", "-", "people!" ]

Nebyl jsem si tohoto chování vědom a vsadím se, že může nahradit nějakou složitou logiku regulárního výrazu!


No