我需要从所有字符串中删除空格\t
和\n
。我有2个选项,我想知道哪个更有效,或者为什么我应该选择一个特定的解决方案。
我问,因为我不是正则表达式的忠实粉丝(不是我最强的领域),但是每当我谷歌出现问题时,正则表达式通常都是最佳答案。我更喜欢自己编写解决方案,但如果这不是最好的方法,我会改变我的心态并在正则表达式上做得更好。
解决方案1(REGEX):
function fixString(str) {
str = str.replace(/(\\t|\\n )/g, "");
return str;
}
解决方案2(forEach - 我的首选方案):
function fixString(str) {
let mapEscapeChars = {
" ": "",
"\t": "",
"\n": ""
}
let keys = Object.keys(mapEscapeChars);
keys.forEach(function(element) {
str = str.replace(element, mapEscapeChars[element]);
});
return str;
}
示例字符串:
" \t1234g" -->>> "1234g"
"\ng1234\t " -->>> "g1234"
答案 0 :(得分:0)
我正在使用正则表达式。虽然难以学习,但它们可能非常强大。根据我的经验,在示例2中编写for循环通常更容易。您可以轻松地创建数组或构建数组:
myarray = "a,b,c"
mystring = "words and stuffs for a and for b"
for i in myarray:
mystring = re.sub(i, "", mystring)
易于阅读。但是,一旦开始在列表中抛出数百个项目,循环就会效率低下。所以我建议:
mystring = "words and stuffs for a and for b"
mystring = re.sub("[abc]+", "", mystring)
一个长期丑陋的正则表达式变得更快,而不必多次循环。如果要多次运行SAME正则表达式,另一个选择是编译它。它在许多语言中都有所不同。但是说你有一个正则表达式来寻找苹果,你会在很多字符串中搜索它:
regex = re.compile("apples")
for word in (huge_list_of_strings):
if re.search(regex, word):
print ("you found it!)
这样一来,正则表达式由引擎创建一次,然后它才会运行。它不必内部构建'每次正则表达式。
所以真的没有错误的方法,只取决于你真正想要的东西:)有时容易阅读值得几秒钟,有时它不是!
在你的情况下,我可能只是做一些事情:
str = str.replace(/[\t\d]/g, ""); --may need to do \\t\\d not sure with this language