繁体   English   中英

JavaScript如何从字符串中删除所有未引用的空格

[英]JavaScript how to remove all unquoted spaces from a string

假设你在JavaScript中有以下字符串: unquoted string\\n "quoted string". 如何删除不在双引号内的所有空格(不包括换行符)(可能使用.replace方法和一些正则表达式)?

编辑:

我正在制作一个从文本文件中读取关卡的游戏。 因此,为了更容易地从级别代码中读取,我试图删除除引号内的所有空格。 我可以尝试: levelString.replace(' ', '') ,但这将删除所有空格,包括引号内的空格。

一种选择是预先检查剩余引号的数量是否为偶数 - 这意味着当前空间不在引号内:

[ ]+(?=[^"]*(?:"[^"]*"[^"]*)*$)

替换为空字符串。 这假设没有引号的转义机制。

请注意,这不是很有效。 使用旧式for循环并跟踪引号内/外引号的脚本可以更快地完成工作。

您还可以使用更简单的replace正则表达式,并在回调函数中使用标志来了解您是否在引号内/外:

 function removeSpaces(s) { let inside = 0; return s.replace(/ +|"/g, m => m === '"' ? (inside ^= 1, '"') : inside ? m : ''); } const result = removeSpaces('"this is inside" and this is outside. "back in again".'); console.log(result); 

replace正则表达式可以匹配引用的字符串和空格。 然后使用replace函数根据需要返回空字符串或带引号的字符串:

 function removeSpaces(s) { return s.replace(/("[^"]*")|([ \\t]+)/g, (x) => { return x.charCodeAt(0) == 34 ? x : "" ; }) } const result = removeSpaces('"this is inside" and this is outside. "back in again".'); console.log(result); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM