我有一个字符串,我需要去掉所有空格,除了""
. 这是我用来去除空格的正则表达式。
str.replace(/\s/g, "");
我似乎无法弄清楚如何让它忽略引号之间的空格。例子
str = 'Here is my example "leave spaces here", ok im done'
Output = 'Hereismyexample"leave spaces here",okimdone'
我有一个字符串,我需要去掉所有空格,除了""
. 这是我用来去除空格的正则表达式。
str.replace(/\s/g, "");
我似乎无法弄清楚如何让它忽略引号之间的空格。例子
str = 'Here is my example "leave spaces here", ok im done'
Output = 'Hereismyexample"leave spaces here",okimdone'
var output = input.split('"').map(function(v,i){
return i%2 ? v : v.replace(/\s/g, "");
}).join('"');
请注意,我重命名了变量,因为我无法使用名称以大写开头的变量编写代码,尤其是当它是语言的标准构造函数时。我建议您在有疑问时坚持这些准则。
另一种方法。这假设在字符串的双引号部分(例如 no "leave \" space \" here"
)内不允许转义,但可以轻松修改以允许转义。
str.replace(/([^"]+)|("[^"]+")/g, function($0, $1, $2) {
if ($1) {
return $1.replace(/\s/g, '');
} else {
return $2;
}
});
修改正则表达式以允许"
在带引号的字符串中转义:
/([^"]+)|("(?:[^"\\]|\\.)+")/
Rob,重新提出这个问题,因为它有一个简单的解决方案,只需要一个replace
电话,而不是两个电话。(在对正则表达式赏金任务进行一些研究时发现了您的问题。)
正则表达式很短:
"[^"]+"|( )
交替的左侧匹配完整的引号字符串。我们将忽略这些匹配。右侧匹配并捕获第 1 组的空格,我们知道它们是正确的间隔,因为它们与左侧的表达式不匹配。
这是工作代码(参见演示):
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);
参考