用于删除除双引号之间的所有空格的Javascript正则表达式

时间:2013-01-26 18:26:02

标签: javascript regex string replace

我有一个字符串,除了""之间的内容之外,我需要删除所有空格。这是我用来删除空格的正则表达式。

str.replace(/\s/g, "");

我似乎无法弄清楚如何让它忽略引号之间的空格。 实施例

str = 'Here is my example "leave spaces here", ok im done'
Output = 'Hereismyexample"leave spaces here",okimdone'

3 个答案:

答案 0 :(得分:8)

var output = input.split('"').map(function(v,i){
   return i%2 ? v : v.replace(/\s/g, "");
}).join('"');

请注意,我重命名了变量,因为我不能使用名称以大写字母开头的变量编写代码,尤其是当它是语言的标准构造函数时。如果有疑问,我建议你坚持使用those guidelines

答案 1 :(得分:7)

另一种方法。这假设在字符串的双引号部分内不允许转义(例如,没有"leave \" space \" here"),但可以很容易地修改以允许转义。

str.replace(/([^"]+)|("[^"]+")/g, function($0, $1, $2) {
    if ($1) {
        return $1.replace(/\s/g, '');
    } else {
        return $2; 
    } 
});

修改正则表达式以允许在引用的字符串中转义"

/([^"]+)|("(?:[^"\\]|\\.)+")/

答案 2 :(得分:4)

Rob,复活这个问题,因为它有一个简单的解决方案,只需要一个replace电话,而不是两个。 (在为regex bounty quest进行一些研究时找到了您的问题。)

正则表达式很短:

"[^"]+"|( )

交替的左侧匹配完整的引用字符串。我们将忽略这些匹配。右侧匹配并捕获第1组的空格,我们知道它们是正确的间隔,因为它们与左侧的表达式不匹配。

以下是工作代码(请参阅demo):

var subject = 'Here is my example "leave spaces here", ok im done';
var regex = /"[^"]+"|( )/g;
replaced = subject.replace(regex, function(m, group1) {
    if (group1 == "" ) return m;
    else return "";
});
document.write(replaced);

参考

  1. How to match pattern except in situations s1, s2, s3
  2. How to match a pattern unless...