【问题标题】:.net vs JS regex issue.net vs JS 正则表达式问题
【发布时间】:2017-12-18 10:02:51
【问题描述】:

我有一个非常复杂的正则表达式,我终于设法在 JS 中工作了

  ^\s*((\(\s*([^]+\"|[@#a-zA-Z0-9_-åäöøæüßÅÄÖØÆÜ\-]+){1}(\s{1,}OR\s{1,}(\"[^\"]+\"|[@#a-zA-Z0-9_-åäöøæüßÅÄÖØÆÜ\-]+))*\s*\)))((\s{1,}(AND|NEAR(\/(100|[0-9][0-9]?)(?=\s))?)\s{1,})(\(\s*(\"[^\"]+\"|[@#a-zA-Z0-9_-åäöøæüßÅÄÖØÆÜ\-]+){1}(\s{1,}OR\s{1,}(\"[^\"]+\"|[@#a-zA-Z0-9_-åäöøæüßÅÄÖØÆÜ\-]+))*\s*\)))?(\s{1,}(AND\s{1,}NOT)\s{1,}(\(\s*(\"[^\"]+\"|[@#a-zA-Z0-9_-åäöøæüßÅÄÖØÆÜ\-]+){1}(\s{1,}OR\s{1,}(\"[^\"]+\"|[@#a-zA-Z0-9_-åäöøæüßÅÄÖØÆÜ\-]+))*\s*\)))?(?=(\s*\))?(\;)?\s*$)

附上文字:(TITLE: "asdasd")

但是当我将文本发送到我的 C# 后端并使用相同的正则表达式时,它会失败。 有什么地方我可以找出它失败的原因吗?我尝试了一些不同的在线工具,但没有一个能解释为什么它不起作用。

我只需要在这里指出正确的方向,因为我是使用正则表达式的新手。谢谢!

【问题讨论】:

  • 如果您向我们展示您拥有的字符串,我们可能会帮助您简化表达方式。
  • 字符串是什么意思?您需要比提供的正则表达式和测试字符串更多的字符串吗?
  • "the same regex" 你确定它是 same 正则表达式吗 - 例如,在转换到/从来自 JS 的 C# - 或许可以准确地发布您在 JS 和 C# 中的使用方式。
  • 是的,我很确定。我实际上将正则表达式存储在我的后端,并在我的 js 中调用一个方法从后端获取它们。 js部分也可以按我的意愿工作,我想当我创建正则表达式字符串并在我的c#代码的同一类中测试它时不需要转义字符串?
  • 我已经在这两个中尝试过:js:regex101.com 和.net:regexstorm.net/tester,我得到了相同的结果。该测试在 regex101 中运行,而不是在 regexstorm 中运行 :(

标签: javascript c# regex


【解决方案1】:

问题是您在表达式中使用的[^]。在 JS 语法中,它匹配任何字符,包括换行符。在 .net 语法中,这不是有效的正则表达式标记。

您应该能够使用[\s\S] 作为两者的替代品,匹配任何字符,包括换行符。

【讨论】:

  • @DanielGustafsson 不要使用[\s\S],使用. 并将RegexOptions.Singleline 选项传递给正则表达式编译器。原生方式总是更高效、更易读。
  • @WiktorStribiżew 我考虑过,但是 JS 正则表达式没有单行选项。
  • 我的意思是.RegexOptons.Singleline应该在C#中使用。
  • @Wiktor 如果我没看错,OP 希望对两者都使用相同的正则表达式。如果不需要,您的评论应该是首选(并且 JS 正则表达式可以保持不变)
  • 是的,我将它们存储在后端,以便将它们放在一个地方。谢谢你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多