(Javascript)正则表达式特定字符但不包括在内

时间:2016-11-02 15:08:56

标签: javascript regex string special-characters

我正在与正则表达式斗争。 我为我的问题找到了一些独立的解决方案,但不能一起工作。 现在我甚至不确定这是否可行。

我有一个字符串:

"ÿÿÿÿÿÿBla bla äöüß!ÿÿÿÿÿ\nÿÿÿстрокаÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿQ\u001f\u0001\u0001"

我要替换所有字符

  • 介于0x00和0x1F之间(直到空格,不可引用)
  • 和0xFF(“ÿ”)
  • 但不是0x0A和0x0D。 (换行符)

我将两个案件分开:

// Works great but removes linebreaks. str = str.replace(/[\x00-\x1F\xFF]+/g, '');

我想排除换行符。

//This only extract the line breaks. str = str.replace(/[^\x0A]/g, '');

但我希望这个/合并。像那样(伪)

'''//正则表达式不正确。但正确的逻辑。 str = str.replace(/ [\ x00- \ x1F \ xFF ^ \ x0A ^ \ x0D] + / g,''); '''

我不知道。 我真的很感激你的建设性帮助。

字符串的结果:

"Bla bla äöüß!\nстрокаQ"

该字符串必须与UTF-8兼容。 我知道有一个正则表达式函数可以删除不可重复的字符。 但这也删除了变音符号(äöü),西里尔字母等。

1 个答案:

答案 0 :(得分:1)

您可以使用

/[\x00-\x09\x0B\x0C\x0E-\x1F\xFF]+/g
       ^^^^^^^^^^^^^^^^   

关键是您需要重新组织字符类中的范围,以排除\x0A(换行符)和\x0D(回车)。

见下面的演示:

var s = "ÿÿÿÿÿÿBla bla äöüß!ÿÿÿÿÿ\nÿÿÿстрокаÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿQ\u001f\u0001\u0001";
console.log(s);
var res = s.replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\xFF]+/g,'');
console.log(res);