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

时间:2018-02-05 21:26:55

标签: javascript regex

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

修改

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

2 个答案:

答案 0 :(得分:7)

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

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

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

请注意,这不是很有效。使用旧式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);

答案 1 :(得分:2)

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);