所以,我最近在修剪空白时找到this example,但我发现它也会影响代码中的字符串。例如,假设我正在进行字符串比较课程,并且为了证明"Hello World!"
和"Hello World!"
不同,我需要代码压缩才能对这两个字符串产生任何影响。< / p>
我使用空格压缩,以便不同格式的人不会因使用我不会使用的内容而受到惩罚。例如,我喜欢格式化我的函数:
function foo(){
return 0;
};
虽然其他人可能会这样格式化:
function foo()
{
return 0;
};
所以我在标点符号周围使用空格压缩以确保它总是相同,但我不希望它影响字符串中的任何内容。有没有办法在JavaScript replace()
函数中添加例外?
答案 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的行为允许在数组中包含拆分器。由于您知道拆分始终位于两个非字符串元素之间,因此您可以通过循环并仅修改每个偶数索引的数组元素来利用它。
如果你想做一般的空白替换,你当然可以修改正则表达式或做多次传递等。