假设您在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);
Run Code Online (Sandbox Code Playgroud)