【问题标题】:Javascript Regular Expression for Removing all Spaces except for what between double quotes用于删除所有空格的Javascript正则表达式,除了双引号之间的内容
【发布时间】:2013-01-10 11:54:47
【问题描述】:

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

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

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

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

标签: javascript regex string replace


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

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

【讨论】:

  • “其名称以大写字母开头或者是该语言的标准构造函数。” -- 后者不代表前者吗?
  • @JanDvorak 我的意思是我也不喜欢Output
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    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...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 2018-08-29
      • 1970-01-01
      相关资源
      最近更新 更多