【问题标题】:make regex compatible with .NET and JS使正则表达式与 .NET 和 JS 兼容
【发布时间】:2019-05-09 15:17:11
【问题描述】:

有人可以帮我修改这个正则表达式模式,使它不使用积极的前瞻和后瞻,因为它们与 JS 和 .NET 不兼容?

我的想法是我试图获得“-”和“-”之间的任何字符的第一个匹配,即。 NY 来自这样的字符串:DSK-NY-110。这是我得到的,但它不能同时在 JS 和 .NET 中工作,所以我需要与两者兼容的东西:

(?<=\-)\w+(?=\-)

谢谢!

【问题讨论】:

  • 使用-(\w+)- 获取Group 1 的值。
  • .NET 支持环视
  • @WiktorStribiżew 我不想在返回组的假设下工作。有没有办法让它忽略两个边界字符?
  • @Thefourthbird 我知道 .NET 可以,但是这个正则表达式在 JS 和 .NET 之间共享,所以它必须在两者中都起作用。
  • 那么你的问题没有解决方案,除非你只针对 ECMAScript 2018 兼容的 JS 环境(支持后向,例如在 Chrome 中)。我宁愿你在你的解决方案中做支持小组,他们更灵活。

标签: javascript .net regex


【解决方案1】:

最安全的方法是依赖 capturing groups 并使用适当的代码隐藏提取子匹配项。

正则表达式可能看起来像

-(\w+)-
 |---|-> Group 1

然后您只需要获取第 1 组的值:

C#:

var groupID = 1; // It can even be user input
var result = Regex.Match(s, @"-(\w+)-")?.Groups[groupID].Value;

在 JS 中:

var groupID = 1, s = "Some-string-here", m;
var result = (m=s.match(/-(\w+)-/)) ? m[groupID] : "";
console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 2012-07-30
    • 2010-11-30
    • 2016-02-02
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多