我的意思是,而不是
/^[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/