有什么解决方案如何使用正则表达式解决这种情况?

时间:2019-07-12 11:08:19

标签: javascript regex

我在解决此问题时遇到问题。

类型列表

Road
Street
Bridge
Service Way

场景1

Word = Roadknight Street

应该匹配世界大街,因为只有大街可以匹配整个单词。并一分为二,因为类型列表中有一个匹配的单词

预期:

Roadknight
Street

场景2

Word = Road Train Road

应该只匹配最后一条路,并将单词分为两部分,因为类型列表中有匹配的单词

预期:

Road Train
Road

场景3

Word = McBridge Service Way

应该匹配服务方式,并将单词分为两个,因为类型列表中有匹配的单词

预期:

McBridge
Service Way

有什么方法可以像公路火车之路那样从右到左进行匹配。我需要从右边进行匹配,一旦有匹配项就停止

到目前为止,我使用match和一些正则表达式,但是没有用。

要匹配类型列表并获得Road之类的街道类型

const typeObj = types.find(type => word.match(type.name));

还有这个

const typeObj = types.find(type => word.includes(type.name));

但是没有用,因为它甚至不匹配Roadknight之类的完整单词,也不匹配Road

获取街道名称,例如Roadknight

const name = word.replace(new RegExp(`\\b${type}\\b/gi`), '');

不确定为什么

还有这个

const name = word.replace(type, '');

无法工作,因为它替换了所有匹配的类型。

希望任何人都可以帮助我

1 个答案:

答案 0 :(得分:2)

要进行比赛,请尝试使用endsWith

const typeObj = types.find(type => word.endsWith(type.name));

然后使用substr进行修整:

const x = word.substr(0, word.length - typeObj.length)