JavaScript:如何计算一个反向RegExp模式来剥离与源模式匹配的字符

JavaScript: how to compute a reverse RegExp pattern for stripping characters that are matched by the source pattern?

本文关键字:剥离 模式 RegExp 字符 模式匹配 一个 何计算 计算 JavaScript      更新时间:2023-09-26

假设我有一个模式/[a-z]+100/(尽管它可以是任何模式),并且需要处理剪贴板内容以去除不属于[a-z01]范围的字符。或者更高级,去掉所有不符合/[a-z]+100/模式本身的东西。例如:如果剪贴板有12345abc200def500100,那么处理的内容将被剥离到abcdef100

是否有可能自动化这个过程,这样我们就可以假设任何源模式都可以被逆转?

作为只返回与正则表达式匹配的字符串的一般响应,您可以编写一个简单的全局正则表达式,返回任何匹配的内容并丢弃其他内容。例如

var testString = '12345abc200def500100'
var testRegex = new RegExp(/[a-z01]/)
var returnString= testString.replace(new RegExp('((?:'+testRegex.source+')+)|.', 'g'), function(full, matched){
  return (typeof matched != "undefined") ? matched : '';
});
console.log(returnString)

在控制台中运行时,记录'1abc00def00100'您应该能够用您想要使用的任何正则表达式更改变量testRegex。例如,使用正则表达式[a-z][0-9]返回'c2f5'