Javascript 我的正则表达式比我的forEach更有效吗?
我需要从所有字符串中删除空格、Javascript 我的正则表达式比我的forEach更有效吗?,javascript,node.js,regex,Javascript,Node.js,Regex,我需要从所有字符串中删除空格、\t和\n。我有两个选择,我想知道哪个更有效,或者为什么我应该选择一个特定的解决方案。 我之所以这么问,是因为我不是regex的超级粉丝(不是我最擅长的领域),但每当我用谷歌搜索我遇到的问题时,regex通常是最重要的答案。我更喜欢自己编写一个解决方案,但如果这不是最好的方法,我会改变我的思维方式,在正则表达式中变得更好 解决方案1(正则表达式): function fixString(str) { str = str.replace(/(\\t|\\n )/g
\t
和\n
。我有两个选择,我想知道哪个更有效,或者为什么我应该选择一个特定的解决方案。
我之所以这么问,是因为我不是regex的超级粉丝(不是我最擅长的领域),但每当我用谷歌搜索我遇到的问题时,regex通常是最重要的答案。我更喜欢自己编写一个解决方案,但如果这不是最好的方法,我会改变我的思维方式,在正则表达式中变得更好
解决方案1(正则表达式):
function fixString(str) {
str = str.replace(/(\\t|\\n )/g, "");
return str;
}
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"
解决方案2(forEach-我的首选选项):
function fixString(str) {
str = str.replace(/(\\t|\\n )/g, "");
return str;
}
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"
字符串示例:
function fixString(str) {
str = str.replace(/(\\t|\\n )/g, "");
return str;
}
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"
我经常使用正则表达式。虽然学习起来很有挑战性,但它们可能非常强大。根据我的经验,编写一个for循环(如示例2中所示)通常更容易。然后,您可以轻松地创建一个数组或构造一个数组:
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)
一个长而丑陋的正则表达式比必须循环多次要快得多。如果要多次运行同一个正则表达式,另一个选项是编译它。它在许多语言中是不同的。但是,假设您有一个正则表达式来查找苹果,您将通过许多字符串来搜索它:
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
我经常使用正则表达式。虽然学习起来很有挑战性,但它们可能非常强大。根据我的经验,编写一个for循环(如示例2中所示)通常更容易。然后,您可以轻松地创建一个数组或构造一个数组:
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)
一个长而丑陋的正则表达式比必须循环多次要快得多。如果要多次运行同一个正则表达式,另一个选项是编译它。它在许多语言中是不同的。但是,假设您有一个正则表达式来查找苹果,您将通过许多字符串来搜索它:
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
我冒昧地猜测,正则表达式的效率更高,因为您只遍历字符串一次,而不是三次。然而,要小心过早的优化。除非您使用非常长的字符串并在一个大循环中进行替换,否则请坚持使用最易于维护的字符串。对我来说,这可能是正则表达式,但对你来说可能不是。使用正则表达式,它比遍历字符串两次更快。正则表达式是在低级别编写的。显示的正则表达式不会执行您想要的操作。它应该使用
\t
和\n
,而不是\\t
和\\n
,并且空格前缺少一个
。为什么不直接使用/\s/g
来匹配所有空白字符,或者使用字符类/[\t\n]/g
?在这里,您可以看到我所说的对JS是正确的:听起来您将字符串文字与字符串值混淆了。如果DB中的字符串包含一个实际的反斜杠字符,后跟一个“t”字符,那么JS不会将其视为转义序列。另一个要添加到腰带中的正则表达式工具演示@nnnn s point:vs我会冒险猜测正则表达式更有效,因为您遍历字符串一次而不是三次。然而,要小心过早的优化。除非您使用非常长的字符串并在一个大循环中进行替换,否则请坚持使用最易于维护的字符串。对我来说,这可能是正则表达式,但对你来说可能不是。使用正则表达式,它比遍历字符串两次更快。正则表达式是在低级别编写的。显示的正则表达式不会执行您想要的操作。它应该使用\t
和\n
,而不是\\t
和\\n
,并且空格前缺少一个
。为什么不直接使用/\s/g
来匹配所有空白字符,或者使用字符类/[\t\n]/g
?在这里,您可以看到我所说的对JS是正确的:听起来您将字符串文字与字符串值混淆了。如果DB中的字符串包含一个实际的反斜杠字符,后跟一个“t”字符,那么JS不会将其视为转义序列。要添加到您的字符串中的另一个正则表达式工具@nnnn s point:vs