我有以下正则表达式:
/["]*(?<name>.*)[\"]*?\s*[<(](?<email>\w.*)[>)]/.match("\"The Boss\" <daboss@aol.com>")
并获得以下结果:
name = The Boss"
email = daboss@aol.com
如何摆脱The Boss的最后一句话“???
随意重构我的正则表达式以使其更具感性......
答案 0 :(得分:2)
问题是(?<name>)
是.*
,它会吃任何东西,包括双引号。解决这个问题的简单方法是将其更改为.*?
。 (这是一个不情愿的匹配器;它匹配尽可能少的字符,而不是尽可能多的字符。)
另一种方法是使用[^"]*
而不是.*
。
这里有一个关于正则表达式的重要教训:每当你写一个正则表达式时,不要只考虑你想要匹配的东西;想想你不想要匹配的东西。使用regexp的非常常见错误源与匹配。
答案 1 :(得分:1)
您可能希望禁用名称中的引号。这将解决您的示例:
/["]*(?<name>[^"]*)[\"]*?\s*[<(](?<email>\w.*)[>)]/.match("\"The Boss\" <daboss@aol.com>")
如果你想支持反斜杠转义,你需要更复杂的东西。