修剪空格而不影响字符串

时间:2016-03-08 22:02:06

标签: javascript string replace whitespace quotes

所以,我最近在修剪空白时找到this example,但我发现它也会影响代码中的字符串。例如,假设我正在进行字符串比较课程,并且为了证明"Hello World!""Hello World!"不同,我需要代码压缩才能对这两个字符串产生任何影响。< / p>

我使用空格压缩,以便不同格式的人不会因使用我不会使用的内容而受到惩罚。例如,我喜欢格式化我的函数:

function foo(){
    return 0;
};

虽然其他人可能会这样格式化:

function foo()
{
    return 0;
};

所以我在标点符号周围使用空格压缩以确保它总是相同,但我不希望它影响字符串中的任何内容。有没有办法在JavaScript replace()函数中添加例外?

2 个答案:

答案 0 :(得分:1)

<强>更新

检查此jsfiddle

var str='dfgdfg   fdgfd fd gfd  g print("Hello      World!"); sadfds                dsfgsgdf' 
var regex=/(?:(".*"))|(\s+)/g;
var newStr=str.replace(regex, '$1 ');
console.log(newStr);
console.log(str);

在此代码中,它将处理除引用字符串

之外的所有内容

更方便地使用代码,您可以看到正则表达式是如何工作的: https://regex101.com/r/tG5qH2/1

答案 1 :(得分:0)

我在这里做了一个jsfiddle:https://jsfiddle.net/cuywha8t/2/

var stringSplitRegExp = /(".+?"|'.+?')/g;
var whitespaceRegExp = /\s+\{/g;
var whitespaceReplacement = "{"

var exampleCode = `var str = "test test test" + 'asdasd "sd"';\n`+
                  `var test2 = function()\n{\nconsole.log("This is a string with 'single quotes'")\n}\n`+
                  `console.log('this is a string with "double quotes"')`;

console.log(exampleCode)

var separatedStrings =(exampleCode.split(stringSplitRegExp))

for(var i = 0; i < separatedStrings.length; i++){
    if (i%2 === 1){
    continue;
  }
  var oldString = separatedStrings[i];
  separatedStrings[i] = oldString.replace(whitespaceRegExp, whitespaceReplacement)
}

console.log(separatedStrings.join(""))

我相信这就是你要找的东西。它处理字符串包含双引号等的情况,而不进行修改。这个例子只是你在帖子中提到的花括号的格式。

基本上,split的行为允许在数组中包含拆分器。由于您知道拆分始终位于两个非字符串元素之间,因此您可以通过循环并仅修改每个偶数索引的数组元素来利用它。

如果你想做一般的空白替换,你当然可以修改正则表达式或做多次传递等。