将Sed函数转换为JavaScript正则表达式

将Sed函数转换为JavaScript正则表达式,javascript,node.js,regex,bash,sed,Javascript,Node.js,Regex,Bash,Sed,我在bash normalize_text() { tr '[:upper:]' '[:lower:]' | sed -e 's/^/__label__/g' | \ sed -e "s/'/ ' /g" -e 's/"//g' -e 's/\./ \. /g' -e 's/<br \/>/ /g' \ -e 's/,/ , /g' -e 's/(/ ( /g' -e 's/)/ ) /g' -e 's/\!/ \! /g' \ -e 's

我在
bash

normalize_text() {
  tr '[:upper:]' '[:lower:]' | sed -e 's/^/__label__/g' | \
    sed -e "s/'/ ' /g" -e 's/"//g' -e 's/\./ \. /g' -e 's/<br \/>/ /g' \
        -e 's/,/ , /g' -e 's/(/ ( /g' -e 's/)/ ) /g' -e 's/\!/ \! /g' \
        -e 's/\?/ \? /g' -e 's/\;/ /g' -e 's/\:/ /g' | tr -s " "
}
尽管有这样的实现,但当我使用JavaScript版本生成文件(使用节点库)时,它将创建一个错误的CSV,导致在读取时出现解析错误

Error: Parse Error: expected: '"' got: 'i'. at 'i met her 

当使用
sed
规范化文件,然后使用
fastcvs
读取时,它将正常工作。

我认为您可以尝试以下代码。演示是

text=text.replace(/^/gm,'.'标签');
text=text.replace(/“/g'”);
text=text.replace(//g',);
text=text.replace(/([()!?。,])/g,$1');
text=text.replace(/[;:]/g',);
text=text.replace(/+/g',);
说明:

  • sed-s
    's/^/\uuu标签
    在每行的开头添加
    '\uu标签
    。在js中,需要多行修饰符,
    /m
  • 删除引号很容易从sed转换为js:
    -e的//“//g”
    变成
    text=text。替换(//“/g”);
  • 将换行符替换为空格基本相同:
    -e的///g'
    变成
    text=text。替换(///g',);
  • 在几个字符周围添加空格。我将它们集中到一个替换中:
    text=text.replace(/([()!?,])/g,“$1”);
    • 您可以在一个字符类中指定多个字符:
      […]
      。如果括号中提到了一个字符,那么它将与一个字符相匹配。尽管
      ^
      -
      字符有一些技巧,您可以检查它们
    • 此字符类位于捕获组中:
      (…)
      ,因此我们可以在替换中使用
      $1
      引用它
  • 您想用空格替换一些字符。我将它们集中在一起,如下所示:
    text=text.replace(/[;:]/g');
  • 我不熟悉
    tr
    命令。我相信在这种情况下,它会用一个空格替换多个空格。你可以用这样的正则表达式来完成:
    text=text.replace(+/g');

您能指出JavaScript实现中缺少的sed函数部分吗?@vesse很好。它实际上应该有几乎所有的sed函数,问题是它们的工作方式不一样,因此在解析输出结果文件时,我从csv库中得到一个错误,而使用
sed
则不会。添加更多nfo,谢谢。替换看起来非常不同…
s/'/'/g
似乎已翻译为
。替换(/'/g,”)
,例如。尝试一次查看一个管道的输出,并将其与JavaScript进行比较,而不是尝试一次完成全部工作。请注意,JavaScript中的
'\.'=='.
也需要每个模式的测试用例。由于指出了不同之处,请开始正确地修复它现在:
text=text.replace(/'/g,“”);
。这是一个很好的建议,由于解析的文件很大,很难检查。
Error: Parse Error: expected: '"' got: 'i'. at 'i met her 
text = text.replace(/^/gm, '__label__');
text = text.replace(/"/g, '');
text = text.replace(/<br \/>/g, ' ');
text = text.replace(/([()!?.',])/g, ' $1 ');
text = text.replace(/[;:]/g, ' ');
text = text.replace(/ +/g, ' ');