删除正则表达式不匹配的所有内容

时间:2017-01-17 23:10:00

标签: javascript regex regex-negation

我正在尝试创建一个可删除非标点字符的可视化,但仍会跟踪字符串中的章节。

到目前为止,我已经实现了创建以下正则表达式以匹配我想要保留的内容:

(\CAPÍTULO ([0-9]+))|([\\?.,:;!¡¿。、·*\(\)\[\]\-–\_«»\'\'\/@#$&\%\^=+\|<>\"])

如何从字符串中替换其余文本?

3 个答案:

答案 0 :(得分:0)

您可以轻松使用replace功能,试试这个例子:

var str = "whatever, string, you like!";
var newStr = str.replace(/\w/g, ' ');

console.log(newStr);

答案 1 :(得分:0)

试试这个:

var r = /(CAPÍTULO [0-9]+|[\\?.,:;!¡¿。、·*\(\)\[\]\-–\_«»\'\'\/@#$&\%\^=+\|<>\"])|(.)/g
var s = "ABC!@#123^&*XYZ;";
var p = s.replace(r, "$1");

// Result: "!@#^&*;"

首先,它匹配组1中的所有字符,任何不匹配都属于第二组。由于未找到组号(即$ 1)的结果为空,这有效地清除了除第一组匹配之外的所有内容。

如果您需要保留其他字符的位置,可以执行以下操作:

var r = /(CAPÍTULO [0-9]+|[\\?.,:;!¡¿。、·*\(\)\[\]\-–\_«»\'\'\/@#$&\%\^=+\|<>\"])|(.)/g
var s = "ABC!@#123^&*XYZ;";
s.replace(r, "$1,").split(",");

// Result: ["", "", "", "!", "@", "#", "", "", "", "^", "&", "*", "", "", "", ";", ""]

您最后需要处理额外的""。 ;)这是有效的,因为不是替换为任何东西,(对于非匹配,"$1"变为"",逗号(或您想要的任何字符),跟踪位置。您可以使用任何内容,例如s.replace(r, "$1~").split("~");

答案 2 :(得分:0)

  

删除非标点字符,但仍会跟踪字符串中的章节。

这样做的经典方法是匹配您要保留的内容(CAPITULO [0-9]+),或者(|)其他 don 't 想保留 - 在这种情况下,非标点字符(\w),然后捕获它,然后用空字符串替换后者。

const regexp = /CAPITULO [0-9]+|(\w)/g;

const input = "CAPITULO 22 .#( nonpunctuation characters $%&*'";

const processed = input.replace(regexp, (match, match1) => match1 ? '' : match);

console.log(processed);

如果您确实要列出要保留的所有标点字符,请将上面的\w替换为

[^\\?.,:;!¡¿。、·*()[\]\-–_«»'\/@#$&\%\^=+\|<>\"]

如果要保留剩余字符的位置,请将替换功能更改为

(match, match1) => match1 ? ' ' : match