【问题标题】:Converting C# RegEx to JavaScript gives error Invalid Group将 C# RegEx 转换为 JavaScript 会产生错误 Invalid Group
【发布时间】:2015-02-24 11:56:07
【问题描述】:

我有以下 C# 正则表达式:

var r = new Regex(@"
                (?<=[A-Z])(?=[A-Z][a-z]) |
                 (?<=[^A-Z])(?=[A-Z]) |
                 (?<=[A-Za-z])(?=[^A-Za-z])", RegexOptions.IgnorePatternWhitespace);

r.Replace(PageName, " ")

我正在尝试将其转换为 JavaScript:

 var r= new RegExp('(?<=[A-Z])(?=[A-Z][a-z]) | (?<=[^A-Z])(?=[A-Z]) | (?<=[A-Za-z])(?=[^A-Za-z])');

PageName.split(pageRegex).join(" ")

但它给了我错误:

Uncaught SyntaxError: Invalid regular expression: /(?<=[A-Z])(?=[A-Z][a-z]) | (?<=[^A-Z])(?=[A-Z]) | (?<=[A-Za-z])(?=[^A-Za-z])/: Invalid group

更新:RegEx 应转换的一些示例:

  • 所有人对所有人
  • PeopleCRB 到 People CRB
  • 人与人之间

【问题讨论】:

  • here。看来您的括号以 (? 开头是一个问题
  • 您能否提供一些您的正则表达式的示例,以便我们提供更多帮助
  • @RedLaser 提供了一些示例

标签: javascript c# regex


【解决方案1】:
([A-Z])(?=[A-Z][a-z])|([^A-Z])(?=[A-Z])|([A-Za-z])(?=[^A-Za-z])

Javascript 不支持lookbehind:(?&lt;= 所以将lookbehind 设为一个组,稍后替换。

替换为$1$2$3 。见演示。

https://regex101.com/r/aI4rA5/11

var re = /([A-Z])(?=[A-Z][a-z])|([^A-Z])(?=[A-Z])|([A-Za-z])(?=[^A-Za-z])/gm;
var str = 'AllPeople\nPeopleCRB\nPeople';
var subst = '$1$2$3 ';

var result = str.replace(re, subst);

【讨论】:

  • 试过你的表达方式,但它没有将PeopleCRB转换为People CRB,而是将其转换为Peopl e CRB
  • 你能举例说明如何使用你的表达吗?正如我所做的那样:PageName.split(pageRegex).join(" ") 其中pageRegex 是您的表达方式。这对您的示例是否正确?
  • 实际上它会将其转换为Peopl e CRB - 查看双倍间距!
  • 我不明白你的意思Replace by $1$2$3 你能举个例子说明你是如何使用这个进行拆分和加入的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
相关资源
最近更新 更多