如何用js正则,过滤掉“德”字辈,非“郭”性人名?

各位老师好,最近在学习正则表达式,
目前要匹配“德”字辈,非“郭”性人名,我是这样做的:

"郭德刚、郭德铁、刁德一、刘德华,A德字母, 1德数字,=德标点".match(/[^郭]德[\u4e00-\u9fa5]{1,2}/g);
//结果:  ["刁德一", "刘德华", "A德字母", "1德数字", "=德标点"]
//思考:“郭”性过滤了,但多了很多诸如"A德字母"之类的东西
"郭德刚、郭德铁、刁德一、刘德华,A德字母, 1德数字,=德标点".match(/[^郭a-z0-9]德[\u4e00-\u9fa5]{1,2}/ig);
//结果["刁德一", "刘德华", "=德标点"]
//思考:有些进步,但"=德标点"没过滤掉
其实说到底,这问题就是请教,如何“匹配一个非"郭"的汉字”
/[非郭的汉字]德[u4e00-u9fa5]{1,2}/ig
谢谢各位老师:

学会了这个,将来就能匹配非t开头的英文单词非4开头的数字等。
如果这个实在不行,估计实际中就得二次过滤了。
谢谢老司机指南,谢谢你的到来。
-
-

阅读 3.1k
4 个回答
var str="郭德刚、郭德铁、刁德一、刘德华,A德字母, 1德数字,=德标点";
    var reg=/([\u4e00-\u9fa5])(?<!郭)德[\u4e00-\u9fa5]{1,2}/g;
    console.log(str.match(reg));
var str = "郭德刚、郭德铁、刁德一、刘德华,A德字母, 1德数字,=德标点";
var result = str.match(/([\u4e00-\u90ec]|[\u90ee-\u9fa5])德[\u4e00-\u9fa5]{1,2}/g);
console.log(result);

你可以找出郭的ASCII编码,然后将[u4e00-u9fa5]从编码处分开,再用选择运算连接起来:
let re = "郭德刚、郭德铁、刁德一、刘德华,A德字, 1德数字,=德标点".match(/([u4E00-u90ec]|[u90ee-u9fa5])德[u4e00-u9fa5]{1,2}/g);
console.log(re)

”郭“对应 \u90ed。剩下的不用多说了吧。

另外,非t开头的英文单词非4开头的数字比匹配汉字简单,不用会郭才能学会。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题