繁体   English   中英

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

[英]Remove everything not matched by regex

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

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

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

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

您可以轻松使用replace功能,请尝试以下示例:

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

尝试这个:

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("~"); 还。

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

经典的方式做到这一点是要匹配想保持(东西CAPITULO [0-9]+ ),OR( | ),你不想让其他的事情-在这种情况下,非标点字符( \\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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM