Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有大量“or”的正则表达式_Javascript_Regex_Parsing_Street Address - Fatal编程技术网

Javascript 带有大量“or”的正则表达式

Javascript 带有大量“or”的正则表达式,javascript,regex,parsing,street-address,Javascript,Regex,Parsing,Street Address,编写一些正则表达式来帮助处理街道地址。然而,我不确定正则表达式是否是解决这个问题的正确方法 我的街道地址如下所示: /^\d+\s+.*(\sAve|\sStreet|\sSt.|..800 MORE ABBREVIATIONS!...)/ig 我想写一个正则表达式,上面写着这个伪代码: match a NUMBER then ONE OR MORE WORDS then a STREET TYPE 在javascript中,此正则表达式类似于: /^\d+\s+.*(\sAve|\sStr

编写一些正则表达式来帮助处理街道地址。然而,我不确定正则表达式是否是解决这个问题的正确方法

我的街道地址如下所示:

/^\d+\s+.*(\sAve|\sStreet|\sSt.|..800 MORE ABBREVIATIONS!...)/ig
我想写一个正则表达式,上面写着这个伪代码:

match a NUMBER then ONE OR MORE WORDS then a STREET TYPE
在javascript中,此正则表达式类似于:

/^\d+\s+.*(\sAve|\sStreet|\sSt.|..800 MORE ABBREVIATIONS!...)/ig
正如你所看到的,因为有,这个正则表达式会非常大。我必须使用计算机代码来生成它,这是可以的,但我不确定这是否是解决此类问题的好方法

我可以看到这个问题,我想编写一个正则表达式,尝试将街道名称与数据库中的街道名称进行匹配。那么我真的不明白标准正则表达式在这种情况下是如何工作的:

match a NUMBER then **A STREET NAME IN A DATABASE** then a STREET TYPE

欢迎您的任何意见

您可以捕获街道类型,然后检查捕获的内容是否在街道类型列表中

正则表达式将变成:

/^\d+\s+.*\s+(.*)


/^\您可以捕获街道类型,然后检查捕获的内容是否在街道类型列表中

正则表达式将变成:

/^\d+\s+.*\s+(.*)


/^\d+\s+.*\s+?p.*

使用捕获组。我不确定JS,但在java中,您可以:

/^\d+\s+.*\w+/ig

您可以使用Matcher.getGroupint获取括号之间的组的内容

稍后,将这些字符串与数据库进行匹配


无论如何。。。。为什么?也许街道类型可以证明这一点,但限制街道名称只会增加更多工作,如果街道名称与数据库中的街道名称不完全相同,或者数据库更新不足,则会给用户带来不便。希望用户给出自己的方向?如果用户不愿意,他可以提供虚假数据。用户希望您知道他的方向?然后您可以相信用户将能够正确地编写它…

使用捕获组。我不确定JS,但在java中,您可以:

/^\d+\s+.*\w+/ig

您可以使用Matcher.getGroupint获取括号之间的组的内容

稍后,将这些字符串与数据库进行匹配


无论如何。。。。为什么?也许街道类型可以证明这一点,但限制街道名称只会增加更多工作,如果街道名称与数据库中的街道名称不完全相同,或者数据库更新不足,则会给用户带来不便。希望用户给出自己的方向?如果用户不愿意,他可以提供虚假数据。用户希望您知道他的方向?然后,您可以相信用户将能够正确地编写它…

如果所有地址都像生活一样简单,那将是非常简单的-但是它们不是,所以它不是


街道地址对于单个正则表达式来说太复杂,例如5/45 East 51 St或215-217 Long Island Way。你需要这样做:分解并解析部分,让用户在特定字段中输入地址,或者只是接受他们给你的地址。

如果所有地址都像生活一样简单,那就非常简单了——但它们不是,所以不是


街道地址对于单个正则表达式来说太复杂,例如5/45 East 51 St或215-217 Long Island Way。您需要:将其分解并解析部分,让用户在特定字段中输入地址,或者只接受他们提供的内容。

我的用例与您假设的用例非常不同。这与限制用户的输入无关。最终目标是获取有错误的地址数据并更正错误。JavaScript捕获组与Java非常相似。然而,关于是否验证用户输入的问题,我不同意。最好的系统会检测用户输入中的错误,而不是无声地失败或简单地计算错误答案,而是通知用户他们犯了错误,并可能建议更正。谷歌和许多其他流行网站提供查询完成功能,Office和web浏览器提供拼写检查功能。如果你想设计好的软件,你必须符合用户的期望。用户希望软件能指出错误并提供修复方法。@AdamMihalcin我很确定,用户在写自己的地址时失败太多,以至于无法向他们发送邮件的错误率很低,这将弥补维护此代码所付出的努力。当地址没有列出时,会带来更多的麻烦,你想在其他国家使用该系统,等等。我确实认为用户很愚蠢,但只是在某种程度上……我的用例与你假设的非常不同。这与限制用户的输入无关。最终目标是获取有错误的地址数据并更正错误。JavaScript捕获组与Java非常相似。然而,关于是否验证用户输入的问题,我不同意。最好的系统检测用户输入中的错误,而不是无声地失败或简单地计算错误的答案,而是通知用户他们已经成功了
我犯了错误,可能是建议改正。谷歌和许多其他流行网站提供查询完成功能,Office和web浏览器提供拼写检查功能。如果你想设计好的软件,你必须符合用户的期望。用户希望软件能指出错误并提供修复方法。@AdamMihalcin我很确定,用户在写自己的地址时失败太多,以至于无法向他们发送邮件的错误率很低,这将弥补维护此代码所付出的努力。当地址未列出时会带来更多麻烦,你想在其他国家使用该系统,等等。我确实认为用户很愚蠢,但只是在某种程度上……不幸的是,我无法控制用户如何输入地址。因此,你只能解析输入或接受他们给你的信息。RegExp可以帮助标记化,但解析将是手动的。而且,如果您处理的是国际地址,那么事情会变得更加复杂。一些国家把号码放在街道的尽头。有些地方根本没有数字。有些街道的名字里有一个数字。并非所有街道名称都有一个类型。有些地方也不命名街道,但这是一个你可以忽略的问题。不幸的是,我无法控制用户如何输入地址。因此,你只能解析输入或接受他们给你的信息。RegExp可以帮助标记化,但解析将是手动的。而且,如果您处理的是国际地址,那么事情会变得更加复杂。一些国家把号码放在街道的尽头。有些地方根本没有数字。有些街道的名字里有一个数字。并非所有街道名称都有一个类型。有些地方也不给街道命名,但这是一个你可以忽略的问题。我曾在四个地方住过,你的注册体验会失败!即使对于您现有的正则表达式,我也会将\s从所有的OR案例中移出,并将其放在前面一次-这将节省1600个字符…实际上是1598,您仍然需要一个实例:-我住在四个地方,你的注册经验会失败!即使对于您现有的正则表达式,我也会将\s从所有的OR案例中移出,并将其放在前面一次-这将节省1600个字符…实际上是1598,您仍然需要一个实例:-