正则表达式中的未终止组

Posted

技术标签:

【中文标题】正则表达式中的未终止组【英文标题】:Unterminated group in regexp 【发布时间】:2015-03-27 01:27:18 【问题描述】:

我尝试在 javascript 中使用正则表达式测试字符串。 正确的字符串看起来像:

<script charset="utf-8">new DGWidgetLoader("width":640,"height":600,"borderColor":"#a3a3a3","pos":"lat":46.00650100065259,"lon":11.263732910156252,"zoom":9

我想测试“宽度”、“高度”看起来像 xxx 或 xxxx,以及“纬度”、“经度” 看起来像 x1,2.x*,缩放看起来像 x1,2

我尝试使用这个正则表达式

/<script charset="utf-8">new DGWidgetLoader(/"width":[0-9]3,4,"height":[0-9]3,4,"borderColor":"#a3a3a3","pos":\"lat":[0-9]1,2.[0-9]+,"lon":[0-9]1,2.[0-9]+,"zoom":[0-9][0-9]//

使用 String.search(),但出现错误 SyntaxError: Invalid regular expression: /&lt;script charset="utf-8"&gt;new DGWidgetLoader(/"width":[0-9]3,4,"height":[0-9]3,4,"borderColor":"#a3a3a3","pos":"lat":[0-9]1,2.[0-9]+,"lon":[0-9]1,2.[0-9]+,"zoom":[0-9][0-9]//: Unterminated group

如何解析如下所示的脚本标签?

【问题讨论】:

有未闭合的括号:DGWidgetLoader(&lt;script&gt; 标签也没有关闭。这正常吗? 【参考方案1】:

您应该使用\ 转义(.

/<script charset="utf-8">new DGWidgetLoader\(\"width":[0-9]3,4,"height":[0-9]3,4,"borderColor":"#a3a3a3","pos":\"lat":[0-9]1,2\.[0-9]+,"lon":[0-9]1,2\.[0-9]+,"zoom":[0-9][0-9]\/

【讨论】:

【参考方案2】:

我认为问题出在这里:

... DGWidgetLoader(/ ....

应该是:

... DGWidgetLoader\(\ ...

在这种情况下,最后的斜线是不必要的。

编辑:另外,转义最后的 标记和其他特殊字符。所以:

/<script charset="utf-8">new DGWidgetLoader\(\"width":[0-9]3,4,"height":[0-9]3,4,"borderColor":"#a3a3a3","pos":\"lat":[0-9]1,2\.[0-9]+,"lon":[0-9]1,2\.[0-9]+,"zoom":[0-9][0-9]\/

这里还有一个小逻辑问题:您的缩放规则需要两个数字,而实际上它可以是一个或两个。你应该考虑解决这个问题。

【讨论】:

这完全是错误的。它返回相同的错误。您还需要转义(

以上是关于正则表达式中的未终止组的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式查找 C# 样式的未转义字符串

正则表达式中 如何取出所有组中的值?

正则表达式(C#)中未终止的[]集[重复]

通过正则表达式模式匹配使用 stringbuilder 替换多次出现的字符串

.NET 正则表达式中的“组”和“捕获”有啥区别?

Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?