【问题标题】:Javascript Regular Expression not working rightJavascript 正则表达式无法正常工作
【发布时间】:2015-01-26 22:25:06
【问题描述】:

在 Javascript 中,我正在读取 .txt 文件以解析并放入 HTML 表中。这工作得很好。在该信息中,有地址行,它们是第一行和第二行的组合(第二行是公寓编号、空间编号等)。它将这些内容很好地读入一行。

我正在尝试做的是分解第一和第二地址行,以便可以将其干净地输入数据库。为了分解它们,我编写了一个正则表达式来捕获尽可能多的选项。他们中的大多数都工作得很好。其中之一是拒绝正常工作,即使所有带有小示例的测试都表明它应该工作。

这是我正在尝试使用的正则表达式部分:Demo

使用的正则表达式:

([\,\s]*)(Ste |Ste\. )

开启:

12 Watershore Circle
825 Stewart Street
820 N Lincoln Way
9235 Bella Vista Way
P.O. Box 4438
9936 Stone Oak Way
599 Hamstead Drive
3941 Park Drive Ste 20 #147
3609 Bradshaw RD,ste H #107
7909 Walerga Road, Ste. 112, PMB 108

我尝试过的选项:

([\,\s]*)(Ste |Ste\. )
([\,\s]+)(Ste |Ste\. )
(\,*[\W]Ste[\W]|\,*[\W]Ste\.[\W])

我网页上的实时结果似乎认为这些意味着什么:

(\,*[\w]Ste[\w]|\,*[\w]Ste\.[\w])

([\,\s]*)(Ste|Ste\.)

如您所见,我只是想将“Ste”(不区分大小写)与行的其余部分分开。现场测试中发生的情况是,任何“Ste”实例(仍然不区分大小写)上的线路都中断了。我在上面提供的链接包含示例正则表达式,它们生成我从实时运行中获得的内容。

这种正则表达式情况是在带有 Razor (c#) 视图页面的 MVC 4 中的 javascript 代码中。同样,我没有在此处列出的其余正则表达式正在寻找完全不同的措辞工作正常。这只是一件。

任何有关如何正确调试此或任何解决方案的建议将不胜感激。谢谢。

【问题讨论】:

  • 您的正则表达式搜索Ste[space]Ste[any character][space]。当您的目标是文字 . 时,您应该始终避开 .,例如 \.。您可以将您的正则表达式缩短为([\,\s]*)(Ste\.? ),而无需使用这些正则表达式查看代码。
  • 很好理解我的那个错字。我已将其更改为该期间的适当逃生。不幸的是,这仍然在两种情况下造成问题。如果我按照你的方式使用它,无论出于何种原因,它都会拆分像“Allister”这样的单词,因为前面的空格和逗号是完全可选的。如果我将其更改为 ([\,\s]+)(Ste\.? ) 以强制其中至少一个在前面,它找不到任何匹配项,即使它应该根据演示工作。
  • 可能不会改变任何东西,但您不需要转义逗号。
  • 变化不大,但感谢您的提醒 :) 这将有助于减少一点斜线混乱。

标签: javascript c# regex asp.net-mvc-4


【解决方案1】:

显然,Crazysheep,您的评论非常重要。这让我想到了逃跑。

我忽略了在我的问题中发布的是,在 javascript 中,我没有直接将正则表达式编写为正则表达式。由于行的长度,我把它写成一个字符串,这样我就可以将它分成多行,然后通过
var re = new RegExp(reString,"gi");

将此字符串转换为正则表达式 由于这个小细节,所有斜线转义都像字符串转义一样工作。这意味着每当我有 \. 时,对于 String,它正在执行文字 . 而不是正则表达式转义。这适用于所有转义。

我之所以注意到它,是因为在正则表达式格式中,它看起来像这样:(\. \d+),它在某物、一个空格和一个 D 的每一个瞬间都在中断。例如:3 Drive 或 @ 987654326@

为了解决这个问题,在字符串中,对于正则表达式中的\.,我放置了\\.,以便转义\,以便它可以在正则表达式中正常运行。

所以,谢谢你 Crazysheep,你提供的帮助比你知道的要多!呵呵

【讨论】: