Javascript字符串Split方法分割字符串并去除空值
分类专栏: Javascript&
简介 在使用split的时候,遇到空字符串的问题的解决方案。
<h1 style="margin-left: 25px; border: 0px; font-size: 24px; color: #3f3f3f; font-family: 微软雅黑; background-color: #fdfcf8; text-align: center;">JavaScript String split() 方法</h1>
<p> </p>
<h2 style="border: 0px; font-size: 18px; color: #3f3f3f; font-family: 微软雅黑; background-color: #fdfcf8;">定义和用法</h2>
<p style="margin-top: 15px; border: 0px; line-height: 21px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8;"><code style="padding: 0px 4px; border: 0px; color: crimson; background-color: #f1f1f1; font-family: Consolas, 'Courier New', Courier, monospace; font-size: 15.4px;">split()</code> 方法将字符串拆分为子字符串数组。</p>
<p style="margin-top: 15px; border: 0px; line-height: 21px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8;"><code style="padding: 0px 4px; border: 0px; color: crimson; background-color: #f1f1f1; font-family: Consolas, 'Courier New', Courier, monospace; font-size: 15.4px;">split()</code> 方法返回新数组,不会更改原始字符串。</p>
<p style="margin-top: 15px; border: 0px; line-height: 21px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8;">如果 (" ") 用作分隔符,则字符串在单词之间进行拆分。</p>
<h2 style="border: 0px; font-size: 18px; color: #3f3f3f; font-family: 微软雅黑; background-color: #fdfcf8;">语法</h2>
<pre style="margin-top: 15px; padding: 20px; border: 1px solid #dddddd; width: 765px; background: #fffefc; line-height: 1.5; font-family: Consolas, 微软雅黑, 'Source Code Pro', Menlo, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace, PingFangSC-Regular, 宋体; overflow-x: auto; font-size: 14px;"><em style="border: 0px;">string</em>.split(<em style="border: 0px;">separator</em>, <em style="border: 0px;">limit</em>)</pre>
<h3 style="margin-top: 25px; border: 0px; font-size: 15px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; background-color: #fdfcf8;">参数</h3>
<table class="dataintable" style="margin-top: 15px; width: 810px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8; border: 1px solid #aaaaaa;">
<tbody style="border: 0px;">
<tr style="border: 0px; background-color: #f5f5f5;">
<th style="padding: 10px; border: 1px solid #3f3f3f; vertical-align: baseline; background-color: #3f3f3f; text-align: left; color: #ffffff; width: 181.25px;">参数</th>
<th style="padding: 10px; border: 1px solid #3f3f3f; vertical-align: baseline; background-color: #3f3f3f; text-align: left; color: #ffffff;">描述</th>
</tr>
<tr style="border: 0px; background-color: #ffffff;">
<td style="padding: 9px; border: 1px solid #aaaaaa; vertical-align: text-top;"><em style="border: 0px;">separator</em></td>
<td style="padding: 9px; border: 1px solid #aaaaaa; vertical-align: text-top;">
<p style="border: 0px; line-height: 18.2px;">可选。用于拆分的字符串或正则表达式。</p>
<p style="margin-top: 15px; border: 0px; line-height: 18.2px;">如果省略,则返回包含原始字符串的数组。</p>
</td>
</tr>
<tr style="border: 0px; background-color: #f5f5f5;">
<td style="padding: 9px; border: 1px solid #aaaaaa; vertical-align: text-top;"><em style="border: 0px;">limit</em></td>
<td style="padding: 9px; border: 1px solid #aaaaaa; vertical-align: text-top;">
<p style="border: 0px; line-height: 18.2px;">可选。限制拆分数量的整数。</p>
<p style="margin-top: 15px; border: 0px; line-height: 18.2px;">超出限制的项目被排除在外。</p>
</td>
</tr>
</tbody>
</table>
<h3 style="margin-top: 25px; border: 0px; font-size: 15px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; background-color: #fdfcf8;">返回值</h3>
<table class="dataintable" style="margin-top: 15px; width: 810px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8; border: 1px solid #aaaaaa;">
<tbody style="border: 0px;">
<tr style="border: 0px; background-color: #f5f5f5;">
<th style="padding: 10px; border: 1px solid #3f3f3f; vertical-align: baseline; background-color: #3f3f3f; text-align: left; color: #ffffff; width: 181.25px;">类型</th>
<th style="padding: 10px; border: 1px solid #3f3f3f; vertical-align: baseline; background-color: #3f3f3f; text-align: left; color: #ffffff;">描述</th>
</tr>
<tr style="border: 0px; background-color: #ffffff;">
<td style="padding: 9px; border: 1px solid #aaaaaa; vertical-align: text-top;">Array</td>
<td style="padding: 9px; border: 1px solid #aaaaaa; vertical-align: text-top;">
<p>包含被拆分值的数组。</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h2 style="border: 0px; font-size: 18px; color: #3f3f3f; font-family: 微软雅黑; background-color: #fdfcf8;">技术细节</h2>
<h3 style="margin-top: 25px; border: 0px; font-size: 15px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; background-color: #fdfcf8;">参数 <em style="border: 0px;">separator</em></h3>
<p style="margin-top: 15px; border: 0px; line-height: 21px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8;">该参数是字符串或正则表达式,从该参数指定的地方分割 <em style="border: 0px;">string</em>。</p>
<h3 style="margin-top: 25px; border: 0px; font-size: 15px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; background-color: #fdfcf8;">参数 <em style="border: 0px;">limit</em></h3>
<p style="margin-top: 15px; border: 0px; line-height: 21px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8;">这个可选的整数指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数字。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。</p>
<h3 style="margin-top: 25px; border: 0px; font-size: 15px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; background-color: #fdfcf8;">返回值</h3>
<p style="margin-top: 15px; border: 0px; line-height: 21px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8;">返回字符串数组。该数组是通过在 <em style="border: 0px;">separator</em> 指定的边界处将字符串 <em style="border: 0px;">string</em> 分割成子串创建的。返回的数组中的子串不包括 <em style="border: 0px;">separator</em> 自身。</p>
<p style="margin-top: 15px; border: 0px; line-height: 21px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8;">但是,如果 <em style="border: 0px;">separator</em> 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个正则表达式匹配的文本)。</p>
<h3 style="margin-top: 25px; border: 0px; font-size: 15px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; background-color: #fdfcf8;">说明</h3>
<p style="margin-top: 15px; border: 0px; line-height: 21px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8;"><code style="padding: 0px 4px; border: 0px; color: crimson; background-color: #f1f1f1; font-family: Consolas, 'Courier New', Courier, monospace; font-size: 15.4px;">split()</code> 方法将创建并返回字符串数组,该数组中的元素是指定的字符串 <em style="border: 0px;">string</em> 的子串,最多具有 <em style="border: 0px;">limit</em> 个。这些子串是通过从头到尾检索字符串中与 <em style="border: 0px;">separator</em> 匹配的文本,在匹配文本之前和之后分割 <em style="border: 0px;">string</em> 得到的。返回的子串中不包括定界符文本(本部分结尾处提到的情况除外)。如果定界符从字符串开头开始匹配,返回的数组的第一个元素是空串,即出现在定界符之前的文本。同样,如果定界符与字符串的结尾匹配,返回的数组的最后一个元素也是空串(假定与 <em style="border: 0px;">limit</em> 没有冲突)。</p>
<p style="margin-top: 15px; border: 0px; line-height: 21px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8;">如果没有指定 <em style="border: 0px;">separator</em>,那么它根本就不对 <em style="border: 0px;">string</em> 执行分割,返回的数组只有一个元素,而不分割字符串元素。如果 <em style="border: 0px;">separator</em> 是空串或与空串匹配的正则表达式,那么 <em style="border: 0px;">string</em> 中的每个字符之间都会被分割,返回的数组的长度与字符串长度相等(假定 <em style="border: 0px;">limit</em> 不小于该长度)(注意,这是一种特殊情况,因为没有匹配第一个字符之前和最后一个字符之后的空串)。</p>
<p style="margin-top: 15px; border: 0px; line-height: 21px; font-family: 'SF Pro SC', 'SF Pro Text', 'SF Pro Icons', 'PingFang SC', Verdana, Arial, 微软雅黑, 宋体; font-size: 14px; background-color: #fdfcf8;">前面说过,该方法返回的数组中的子串不包括用于分割字符串的定界符文本。但如果 <em style="border: 0px;">separator</em> 是包括子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的子串(但不包括与整个正则表达式匹配的文本)。</p>
<pre> </pre>
<pre class="language-javascript"><code>最简单的例子,用逗号分割字符串,得到字符串数组
let str = "a, b, c, d";
let strArr = str.split(",");
分割后的结果是
["a","b","c","d"]
但有时我们的原始字符串并不规则,可能有逗号分隔符,又有分号分隔符,结尾处还有一个额外的分号
let str = "a,b;c,d,";
这种情况下,直接用str.split(",")得到的将不是想要的结果,"b;c"不会被分开,且数组中会有空值""
["a","b;c","d",""]
解决的办法就是,使用正则表达式指定多个分割符,再用filter 方法过滤去除数组中的空值:
let strArr = str.split(/[,;]/).filter(item => item !== '')
这样,得到的结果是
["a","b","c","d"]</code></pre>
分享到:
转载:
喜欢 0
收藏
暂无评论信息
- 相关文章
- 文章推荐
-
docker搭建jenkins环境执行宿主机的docker无权限的解决方法
初次搭建jenkins持续集成工具的时候,在运行项目阶段出现 permission denied的情况
-
半导体短缺即将结束?分析师:如果没有 1 美元芯片会影响更多
德勤咨询(Deloitte Consulting)的芯片分析师认为,随着芯片行业资本支出的增加,需求度较高的工厂已经开工,预示着短缺情况即将结束。
-
Docker 常用命令
docker目前代替虚拟机使用的一个容器,灵活好用。
-
Node 配置sequelize + mysql,根据模型自动创建数据库表
研究了一下午的node + sequelize + mysql。
- 点击排行
- 站长推荐
- 猜你喜欢
- 网站信息
- 站内问答:12篇
- 站内文章:212篇
- 建站时间:已运行1107天
- 备案号: 浙ICP备2022018799号
- 语言:
English(USA)
French(FR)
Chinese(ZH)
无数据