我需要帮助在JavaScript中通过空格(““)分割字符串,忽略引号表达式中的空格。
我有这个字符串:
var str = 'Time:"Last 7 Days" Time:"Last 30 Days"';
字符串
我希望我的字符串被拆分为2:
['Time:"Last 7 Days"', 'Time:"Last 30 Days"']
型
但我的代码拆分为4:
['Time:', '"Last 7 Days"', 'Time:', '"Last 30 Days"']
型
这是我的代码:
str.match(/(".*?"|[^"\s]+)(?=\s*|\s*$)/g);
型
谢谢你,谢谢
4条答案
按热度按时间vuv7lop31#
字符串
解释:
型
事实证明,要修复原始表达式,您只需在组上添加
+
:型
envsm3lx2#
ES6解决方案支持:
代码:
字符串
输出量:
型
bis0qfac3#
这对我来说很有用。
var myString = 'foo bar“sdkgyu sdkjbh zkdumps”baz“qux quux”skduy“zsk”'; console.log(myString.split(/([^\s”]+|“[^"]*”)+/g));
**输出:**Array ["",“foo”,““,“bar”,““,““sdkgyu sdkjbh zkdumps”",““,“baz”,““,““qux quux”",““,“skduy”,““,““zsk”“,“"]
4urapxun4#
我知道这个问题是关于正则表达式的,但是你用正则表达式做的字符串分割或子字符串提取等任务越多,你就越会注意到正则表达式的复杂性比字符串的复杂性增长得快得多:首先,你必须避免使用带引号的正则表达式分割,你只需要使用一些几乎随机的正则表达式就可以了;然后你需要尊重双引号区域,你修改你的正则表达式,使它增长3-4倍;等等。最终你的正则表达式变成了一个wunschpunsch,没有清醒的人会想要支持它。所以,虽然正则表达式的解决方案一开始看起来很忍者和elegant,我终于停止使用它,并切换到自定义功能,尊重报价区:
字符串
正如你所看到的,你可以使用任意数量的自定义区域标记,无论是双引号,花括号还是其他一些括号:
型
这是冗长的,但如果您需要修改这个函数,您会喜欢它的逻辑是多么简单
问题中的案例示例:
型