Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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';s的消极前瞻不';你不能按预期工作吗?_Javascript_Regex - Fatal编程技术网

JavaScript';s的消极前瞻不';你不能按预期工作吗?

JavaScript';s的消极前瞻不';你不能按预期工作吗?,javascript,regex,Javascript,Regex,我在文本区域中有一些数据: (是的,它是多行的) 在每一行中-我想删除这些部分:(从“(include)到行末): 视觉上:(我只采样了4个) 我设法做到了这一点: value=value.replace(/\"[a-z,. ]+(?!.*\")/gi,'') 这意味着:搜索第一个“后有特许权的地方,它没有未来的” 这将产生所需的结果: "@ObjectTypeID "@ObjectID32, "@ClaimReasonID "@ClaimReasonDetails "@Accide

我在
文本区域中有一些数据

(是的,它是多行的)

在每一行中-我想删除这些部分:(从
(include)到行末):

视觉上:(我只采样了4个)

我设法做到了这一点:

   value=value.replace(/\"[a-z,. ]+(?!.*\")/gi,'') 
这意味着:搜索第一个
后有特许权的地方,它没有未来的

这将产生所需的结果:

"@ObjectTypeID
"@ObjectID32,
"@ClaimReasonID
"@ClaimReasonDetails
"@AccidendDate
"@AccidendPlaceID
"@AccidendPlaceDetails
"@TypeOfMedicalTreatment
"@MedicalTreatmentDate
"@CreatedBy32
"@Member_ID
.ExecuteScalar(command).ToS
问题:

我理解它为什么起作用,但我不理解为什么以下各项不起作用:

value=value。替换(/\“+(?!.\”)/gi')

我的意思是:它假设搜索
后面有章程的地方,而后面没有未来的


我遗漏了什么?我真的很讨厌声明
[a-z,.]
+
是贪婪的。因为“整件事”符合你的规则“以后不能有
,这就顺其自然了

第一个正则表达式工作的原因是,通过显式地将某些字符列为白名单来禁止大多数字符

要修复此问题,请尝试在
+
之后添加
——这将使其变为惰性,在满足规则的情况下尽可能少地匹配


此外,你正在搜索你想要保留的东西。。。然后删除它

请尝试以下方法:

val = val.replace(/"[^"]*(?=[\r\n]|$)/g,'');

这将删除从最后一个
到行尾(或输入端)的所有内容。

由于
+
贪婪,无法工作的内容将失败。它会耗尽所有可能的内容。(可视化工具可在此提供帮助,例如此工具:)通过将
+
放入捕获组,我们可以更清楚地看到它匹配得太多:这表明:

在你的一个确实有效的()中,你已经将其改为
[a-z,.]+
,意思是“一个或多个a到z、逗号、句点或空格”(注意,
只有一个句点,不是通配符)。这是非常有限的(特别是,它不包括
@


旁注:不需要用反斜杠转义
在正则表达式中不是特殊字符

意思是:搜索第一个
后有特许权的位置,该位置没有未来的

确切地说:它匹配第一个
,该字符后面有一些字符
[a-z,.]
,之后不(在任何距离上)跟另一个

我不明白为什么以下情况不起作用:

value=value.replace(/\".+(?!.*\")/gi,'')
您已经删除了字符类的限制。
+
现在将匹配任何字符,包括引号。无论是否贪婪,它现在都将找到第一个
,后面跟任意数量的字符(包括其他引号)后面不再加引号-即,如果
+
匹配到最后一个引号就足够了

我真的很讨厌声明
[a-z,.]

您可以只使用除引号外的所有字符的类:
[^”]
。事实上,我认为下面的无前瞻性版本更符合您的意图:

value = value.replace(/"[^"\n\r]*/gi, '');

为什么下面的正则表达式不起作用

\".+(?!.*\")
答复:

\“
匹配第一个
,下面的
+
将贪婪地匹配到最后一个字符。因为行中的最后一个字符后面没有任何字符零次或多次加上
\
,所以上面的正则表达式将毫无疑问地匹配整行

对于您的情况,您可以简单地使用下面的正则表达式来匹配从第二个
到线锚的末端

\"[^"\n]*$

您的预期输出是什么?@AvinashRaj我已经展示了:-)“事实上,我认为下面的前瞻免费版本更符合您的意图”+1
\".+(?!.*\")
\"[^"\n]*$