Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 这个正则表达式没有';t匹配最后两行,但理论上应该匹配_Javascript_Regex - Fatal编程技术网

Javascript 这个正则表达式没有';t匹配最后两行,但理论上应该匹配

Javascript 这个正则表达式没有';t匹配最后两行,但理论上应该匹配,javascript,regex,Javascript,Regex,我有下面的文本,我正在努力匹配 [id] [int] IDENTITY(1,1) NOT NULL, [name] [nvarchar](255) NOT NULL, [type] [nvarchar](255) NOT NULL, [number_of_persons] [int] NOT NULL, [number_of_suitcases] [int] NOT NULL, [created_at] [datetime2](3) NOT NULL,

我有下面的文本,我正在努力匹配

[id] [int] IDENTITY(1,1) NOT NULL,
    [name] [nvarchar](255) NOT NULL,
    [type] [nvarchar](255) NOT NULL,
    [number_of_persons] [int] NOT NULL,
    [number_of_suitcases] [int] NOT NULL,
    [created_at] [datetime2](3) NOT NULL,
    [updated_at] [datetime2](3) NOT NULL,
    [description] [text] NULL,
    [number_of_children] [int] NULL,
    [number_of_small_suitcases] [int] NULL,
    [code] [nvarchar](255) NULL,
    [sort_order] [int] NULL,
    [default_number_persons] [int] NULL,
    [margin_fixed] [nvarchar](10) NULL,
    [margin_percentage] [nvarchar](10) NULL,
    [car_type_id] [int] NULL,
    [recommended] [bit] NULL
)
我使用下面的正则表达式来匹配逗号后面的换行符

\,\s?(?![^\(]*\))
其工作原理如下:

但当我使用它时,它在我上面的最后3行文本中失败了

我在javascript中使用它来拆分上面的字符串

在本例中,是什么导致正则表达式失败?在这个样本之前,它一直工作得完美无缺

string.split(/\,\s?(?![^\(]*\))/);
编辑

我忘记了另一个约束,如果您希望提出修复,正则表达式必须遵守。 这个正则表达式还必须对约束中的文本求反,将其全部推到一个大字符串中,但要匹配前两个。这就是当前正则表达式所做的

请看下面代码段中testcase的输出,了解我的意思

[car_id] [int] NOT NULL,
    [car_sales_combo_id] [int] NOT NULL,
 CONSTRAINT [PK_exitcontrol_carmanager_car_to_combo] PRIMARY KEY CLUSTERED 
(
    [car_id] ASC,
    [car_sales_combo_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
console.log(“测试正则表达式失败”);
console.log(document.getElementById('text').value.split(/\,\s?(?![^\(]*\)/);
log(“它还必须处理的测试用例。第三个数组条目应该是一个大文本块”);
console.log(document.getElementById('testcase').value.split(/\,\s?(?![^\(]*\)/)

[id][int]标识(1,1)不为空,
[name][nvarchar](255)不为空,
[type][nvarchar](255)不为空,
[人数][int]不为空,
[行李箱数量][int]不为空,
[创建时间][datetime2](3)不为空,
[更新日期][datetime2](3)不为空,
[说明][文本]空,
[子女人数][int]NULL,
[小型手提箱的数量][int]空,
[code][nvarchar](255)空,
[排序顺序][int]NULL,
[默认人数][int]空,
[margin_fixed][nvarchar](10)空,
[保证金百分比][nvarchar](10)空,
[car_type_id][int]NULL,
[建议][bit]空
)
[car_id][int]不为空,
[car\u sales\u combo\u id][int]不为空,
约束[PK_exitcontrol_carmanager_car_to_combo]主键群集
(
[car_id]ASC,
[汽车销售组合id]ASC
)在[主]上打开(PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON)
)

我认为您想要做的事情可以通过简单地删除
字符)的否定来实现

/\,\s(?![\(]*\))/g
而不是

/\,\s(?![^\(]*\))/g
请点击此处:


这样,您就可以检查逗号是否不紧跟任何数量的
后跟

此正则表达式会捕获每行的最后一个“,”

 (,\n)

您的正则表达式所做的是匹配一个逗号,可选地后跟一个空格,不是后跟一个没有
结尾的字符串)

最后几行

[margin_percentage] [nvarchar](10) NULL,
[car_type_id] [int] NULL,
[recommended] [bit] NULL

由于类型
int
bit
没有长度(没有括号),因此反向前瞻失败,因为这些行中的所有逗号后面都紧跟着一个不带
结尾)的字符串.

我在查看了提供的答案后,忘记了提及另一个约束,我想知道原因。我不得不四处挖掘。我修改了我的问题。你能再看一看吗?约束是否总是在最后?是的。我使用sql server输出,
脚本表as>创建到>查询编辑器窗口
我使用了我工作流程的另一部分过滤掉所有多余的数据,并在迁移脚本中添加索引和约束。因此,我需要将整个字符串放在一个字符串中。就像在代码段输出中一样。是的,测试用例又如何。它也匹配所有逗号,但不应匹配这些逗号。@tschallaka您希望最后一个逗号也匹配吗(在我上面的最后3行文字中,它失败了)所以这个答案是正确的。不,不是。它在有约束的情况下失败。你的规则不清楚。你应该列出它们,不要使用多余的措辞。@revo I添加了一句话
,看看下面代码片段中testcase的输出,了解我的意思。
那么你想让我们解码吗?请指定规则。这样更好。我理解您只需要捕获逗号后的换行符。请提供更简单、更清晰的说明,说明您想要实现的目标。