[英]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.