所以,我最近在修剪空格方面发现了this example,但我发现它也会影响代码中的字符串。例如,假设我正在做一堂关于字符串比较的课程,为了证明"Hello World!"
和"Hello World!"
是不同的,我需要代码压缩不会对这两个字符串产生任何影响。
我使用空格压缩,这样具有不同格式样式的人就不会因为使用我不使用的东西而受到惩罚。例如,我喜欢这样格式化我的函数:
function foo(){
return 0;
};
而其他人可能会这样格式化它:
function foo()
{
return 0;
};
所以我在标点符号周围使用了空格压缩,以确保它始终是相同的,但我不希望它影响字符串中的任何内容。有没有办法在JavaScript的replace()
函数中添加异常?
发布于 2016-03-08 22:31:59
更新:
检查此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
发布于 2016-03-09 18:25:45
我在这里做了一个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的行为允许在阵列中包含拆分器。由于您知道拆分总是在两个非字符串元素之间进行,因此可以通过循环遍历和修改每个偶数索引的数组元素来利用这一点。
如果你想做一般的空格替换,你当然可以修改regexp或者执行多遍,等等。
https://stackoverflow.com/questions/35878916
复制