javascript - 为什么不能在正则表达式中定义自己的自定义字符类?

标签 javascript regex pcre

我的意思是,而不是

/^[asdfjkl;]foo[asdfjkl;]bar[asdfjkl;]baz$/i

甚至

RegExp('^[[:HOMEROW:]]foo[[:HOMEROW:]]bar[[:HOMEROW:]]baz$'.replace(/\[:HOMEROW:]/g, 'asdfjkl;'))

我也许可以写:

/\H=[asdfjkl;];^\Hfoo\Hbar\Hbaz$/

为什么没有人想到这一点,假设他们想到了,为什么它没有得到更多的支持或实现?

注意:我对此的哲学方面更感兴趣:排除该功能的理由是什么?

最佳答案

您可以为 RegExp 创建一个包装对象:

myRegExp = function(regex,mods) {
    var customclasses = {
        nonDotLocalChar:'A-Za-z0-9!#$%&\'*+-/=?^_`{|}~'
    }, i;
    for( i in customclasses) {
        regex = regex.replace(new RegExp("\[:(\^?)"+i+":\]","i"),"$1"+customclasses[i]);
    }
    return new RegExp(regex,mods);
};

然后您可以像这样使用上面的内容:

var eam = new myRegExp("^[[:nondotlocalchar:]](?(?:[[:nondotlocalchar:]].........");

您还可以像这样使用它:

new myRegExp("[[:^nondotlocalchar:]]"); // negates the custom class
new myRegExp("[@[:nondotlocalchar:]]"); // allow anything from the custom class, or the @ character

关于javascript - 为什么不能在正则表达式中定义自己的自定义字符类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12767741/

相关文章:

regex - 在环视中使用捕获组

Javascript if 检测保持在 for 循环中运行

javascript - 将自定义用户代理关联到特定的 Google Chrome 页面/标签

c - Delphi PerlRegEx : Link . 静态 obj 文件,因此它们不依赖于 msvcrt.dll

C# 在使用 Json.NET 读取 JSON 内容时保留转义序列

Javascript替换每个字符串的第一个字母?

Apache 安装; libpcre 错误

javascript - 在 Angular 8 应用程序中使用外部 JavaScript 库

javascript - 动态拖动文本

regex - TRegex.Match 从不​​匹配空字符串