具有RegExp正则表达式(/ \ s * $ /)的JavaScript拆分功能

cae*_*ang 5 javascript regex

它是关于使用regexp作为分割符在字符串末尾进行分割

console.log('ab '.split(/\s*$/));
Run Code Online (Sandbox Code Playgroud)

输出:['ab','']

但是如果我删除结尾空间

console.log('ab'.split(/\s*$/))
Run Code Online (Sandbox Code Playgroud)

输出:['ab']

为什么第二个在输出中没有?

Md.*_*fee 0

split 将字符串转换为新数组中的子字符串数组。例如-

"ab cd".split(" ")
Run Code Online (Sandbox Code Playgroud)

结果:["ab", "cd"]

它在有空白的地方分裂" "。但如果没有空格,它将创建包含主字符串的数组。例如-

"abcd".split(" ")
Run Code Online (Sandbox Code Playgroud)

结果:["abcd"]

现在来看看正则表达式的部分。

用于\s查找空白字符。

'ab '.split(/\s/)结果["ab", ""]'ab'.split(/\s/)结果["ab"]

第一个字符串包含一个空格,它将字符串分成两个子字符串,但第二个字符串不包含空格,因此它不创建子字符串。

匹配n*任何包含零次或多次出现 n 的字符串。

so,\s*匹配任何包含零个或多个空白字符的字符串。

'ab '.split(/\s*/)结果["a", "b", ""]'ab'.split(/\s*/)结果["a", "b"]

由于第一个字符串包含一个空格和一个零空格(总共两个),因此它将字符串拆分为三个子字符串。但第二个字符串仅包含一个零空白,因此它创建了两个子字符串。

量词n$匹配任何末尾带有 n 的字符串。

so\s*$匹配 string 至少有一个空格的任何字符串。因为它只会在空格结尾处匹配,如果没有空格,则不会结束。所以,它不会匹配。

'ab '.split(/\s*$/)结果["ab", ""]'ab'.split(/\s*$/)结果["ab"]

由于第一个字符串包含一个空格,因此它将字符串拆分为两个子字符串,但由于第二个字符串中没有任何空格,因此它不会创建子字符串。

简而言之,(/\s*$/)模式搜索空白末尾的任何空白。当您使用 时split(/\s*$/),它仅在模式匹配时才会拆分。