【发布时间】:2015-05-14 23:25:23
【问题描述】:
我有一些这样的输入数据:
1996 年卡特彼勒 d6 推土机出售(约翰迪尔和小松也有!)
我想匹配找到的第一个品牌名称并将其映射到其规范值。
这是地图:
canonical regex
KOMATSU \bkomatsu\b
CAT \bcat(erpill[ae]r)?\b
DEERE \b(john )?deere?\b
我可以很容易地测试一个品牌是否在字符串中:
/\b(cat(erpill[ae]r)?|(john )?deere?|komatsu)\b/i.exec(...) != null
或者第一个匹配是什么:
/\b(cat(erpill[ae]r)?|(john )?deere?|komatsu)\b/i.exec(...)[0]; //caterpiller
但是有没有一种快速或方便的方法可以将第一个匹配项映射到我想要的实际值?
caterpiller => CAT
我是否需要找到第一个匹配项,然后针对地图中的所有模式进行测试?
我需要针对 10,000 多个品牌进行 10,000 多个输入:D
我可以循环地图,针对输入值进行测试,但这会找到地图中出现的第一个值,而不是输入。
【问题讨论】:
-
方法是使用捕获组号来知道找到了什么。基本上如果组 m 存在 => CAT,如果组 n => KOMATSU 等。您所需要的只是设计您的模式来做到这一点。
标签: java javascript regex