打开一个JavaScript正则expression式的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/\?/ \? /g' -e 's/\;/ /g' -e 's/\:/ /g' | tr -s " " } 

我必须将其转换为JavaScript RegExp

这是我的部分实施

  text=text.toLowerCase(); text=text.replace(/(?:\\[rn]|[\r\n]+)+/g, " "); text=text.replace(/'/g, " ' "); text=text.replace(/"/g, ''); text=text.replace(/\./g, ' \. '); text=text.replace(/,/g, ' \, '); text=text.replace(/\(/g, ' ( '); text=text.replace(/\)/g, ' ) '); text=text.replace(/!/g, ' ! '); text=text.replace(/\?/g, ' ! '); text=text.replace(/;/g, ' '); text=text.replace(/:/g, ' '); text=text.replace(/\t+/g,'\t').replace(/\t\s/g,' ').replace(/\t/g,' '); 

尽pipe这个实现,当我使用JavaScript版本来生成文件(使用FastCSV节点库),它会创build一个错误的CSV,导致parsing错误时,阅读

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

当使用sed对文件进行规范化处理,然后使用FastCSV进行读取时,它将正常工作。

我认为你可以尝试下面的代码。 演示在这里 。

 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, ' '); 

说明:

  • sed-s 's/^/__label__/' '__label__'添加到每一行的开头。 在js中你需要多行修饰符, /m
  • 消除引号很容易从sed翻译成js: -e 's/"//g'变成text = text.replace(/"/g, '');
  • 换行到空格基本上是一样的: -e 's/<br \/>/ /g'变为text = text.replace(/<br \/>/g, ' ');
  • 您在几个字符周围添加空格。 我把它们放在一个单独的replace中: text = text.replace(/([()!?.',])/g, ' $1 ');
    • 您可以在字符类中指定多个字符: [...] 。 如果在括号内提到,它将匹配1个字符。 虽然有^-字符有一些技巧 – 你可以在这里查看它们。
    • 这个字符类在一个捕获组中: (...)所以我们可以在replace中用$1来引用它。
  • 你想用一个空格replace一些字符。 我把它们放在一起就像这样: text = text.replace(/[;:]/g, ' ');
  • 我不熟悉tr命令。 我相信在这种情况下,它会用一个replace多个空格。 你可以用这样的正则expression式来实现: text = text.replace(/ +/g, ' ');