如何在不将空值发送到输出数组的情况下拆分字符串

Posted

技术标签:

【中文标题】如何在不将空值发送到输出数组的情况下拆分字符串【英文标题】:How to split string without getting empty values to the output array 【发布时间】:2016-03-26 01:54:07 【问题描述】:

我正在使用split 函数来拆分我的字符串/value/1

var value = "/value/1/";

var arr = value.split("/");

结果我将得到一个包含 4 个元素“”、“值”、“1”、“”的数组; 但我真的需要输出数组中的非空值。 有没有办法根据我的输入字符串生成一个数组,但数组没有空白元素?

我的字符串可能是/value/1/ /value/1 /value/ /value 基本上我正在处理http request.url

【问题讨论】:

var value = /value/1/; 不应使用反引号括住字符串,使用单引号或双引号。 是的,这只是我的格式错误 【参考方案1】:

尝试使用Array#filter

var arr = value.split("/").filter(function (part)  return !!part; );

或与 Tushar 建议的相同的较短版本。

var arr = value.split("/").filter(Boolean);

【讨论】:

如果你想这样做,那么使用value.split('/').filter(Boolean); 我通常会使用 ES6 让它看起来更漂亮,但是这也是可能的。 参考Boolean 传递给filter 的工作原理。 What is the filter call for in this string split operation? 和 Get number of non-empty elements from nested arrays【参考方案2】:

您可以将match 与正则表达式一起使用。

str.match(/[^\/]+/g);

正则表达式[^\/]+ 将匹配任何不是正斜杠的字符。

function getValues(str) 
  return str.match(/[^\/]+/g);


document.write('<pre>');
document.write('<b>/value/1/</b><br />' + JSON.stringify(getValues('/value/1/'), 0, 4));
document.write('<br /><br /><b>/value/1</b><br />' + JSON.stringify(getValues('/value/1'), 0, 4));
document.write('<br /><br /><b>/value/</b><br />' + JSON.stringify(getValues('/value/'), 0, 4));
document.write('<br /><br /><b>/value</b><br />' + JSON.stringify(getValues('/value'), 0, 4));
document.write('</pre>');

【讨论】:

最后两个参数...0, 4JSON.stringify() 中是什么意思? @sreginogemoh 这些仅用于在页面上显示结果,参数用于格式化目的。您只能使用str.match(/[^\/]+/g); 代码来获取匹配项。【参考方案3】:

如果您仍然想使用字符串来匹配符号,您可以尝试使用:RegExp("/", "g") - 但这不是最好的情况,如果您仍然不想匹配转义符号 \ 并提供一些 API 供您使用可以使用RegExp("[^\/]*", "g")/[^\/]*/g

【讨论】:

以上是关于如何在不将空值发送到输出数组的情况下拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在不将您的应用设为默认消息应用的情况下将短信发送到 android 中的特定应用?

如何使用 LINQ 将空值发送到 ASP.NET 中的非空列

剑道网格发布和删除将空值发送到控制器

在不将它们置于前台的情况下进行应用间通信的最佳方法?

如何在不将其注册为机器人的情况下创建不和谐机器人?

如何在不获取输出的情况下调用发送函数?