本帖最后由 a20150604 于 2019-11-7 21:19 编辑
回复 10# 523066680
我自己用过的最长也较复杂的正则模式, 近几月的事, 之前从未对正则有过这样的需求, 也就从未有过多的学习:
从一段有较固定格式的文本解析出 25 个子项 (语言: javascript)
长而包含多项子匹配(甚至嵌套)的模式写得稍不好, 就极大降低运行效率, 甚至卡死. 简单测试基本无卡死就作罢了- var patt_ZDJY = /任务编号[\::]?\s*(ZD20\d{14}|ZD20\d{12}|LS\d{11}|)\s*[\|]?[\s\S]*请求服务[\::]?\s*((?!车架号)\S*|(?!车架号)\S[\s\S]*\S|)\s*车架号[\::]?\s*([\da-z]{17}|\**[\da-z]{6}|)\s*\S*[\s\S]*车牌号[\::]?\s*(\S*)\s*车主姓名[\::]?\s*(\S*)\s*车主电话[\::]?\s*(1\d{10}|)\s*(?:车辆品牌)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*车型[\::]?\s*((?!备注)\S*|(?!备注)\S[\s\S]*\S|)\s*(?:备注)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*请求地址[\::]?\s*([^\s\,,]+(?![,,,])|[^\s\,,][\s\S]*[^\s\,,]|)[,,\s]*位于[\::]?\s*\S*\s*地址补充[\::]?\s*(\S*|\S[\s\S]*\S)\s*目的地地址[\::]?\s*(\S*|\S[\s\S]*\S)\s*目的地补充[\::]?\s*(\S*|\S[\s\S]*\S)\s*服务商名称[\::]?\s*(\S*|\S[\s\S]*\S)\s*服务车辆[\::]?\s*(\S*)\s*服务人员工号[\::]?\s*(\S*)\s*服务人员电话[\::]?\s*(1\d{10}|)\s*[\s\S]*服务人员到达事发地[\::]?\s*(\S*|\S[\s\S]*\S)\s*实拖目的地[\::]?\s*((?!(?:故障类型|指定子机构))\S*|(?!(?:故障类型|指定子机构))\S[\s\S]*\S|)\s*(?:故障类型)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*(?:故障类型确认)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*(?:指定子机构)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*结算类型[\::]?\s*(\S*|\S[\s\S]*\S)\s*(?:服务状态)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*(?:服务是否成功)?[\::]?\s*(\S*)\s*(?:服务评价)?/i;
复制代码
|