Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的正则表达式比我的forEach更有效吗?_Javascript_Node.js_Regex - Fatal编程技术网

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