2016-11-21 605 views
0

我想匹配字符,但我只需要匹配单个大写字母。 例如:只匹配一个大写字母的正则表达式

'Hello World' - 2 matches 
'Hello WOrld' - 1 match 
'HEllo WOrld' - 0 matches 

到目前为止,我有/(?![A-Z]{1})/g但我想我已经误解负前瞻是什么。

谢谢!

回答

0

我设法用Edge.js调用C#来解决这个问题来自Node的函数,这让我可以解决JavaScript正则表达式的限制。

最后的代码最终看上去像这样:

const getPerson = edge.func(function() {/* 
using System.Text.RegularExpressions; 
using System.Threading.Tasks; 

public class RegexReplacer { 
    public string PutSpacesBeforeCaps (string input) { 
     Regex regex = new Regex(@"((?<![0-9])(?<![A-Z])[A-Z](?![A-Z])(?![0-9]))"); 
     return regex.Replace(input, " $1"); 
    } 
} 

public class Startup { 
    public async Task<object> Invoke(dynamic input) { 
     RegexReplacer replacer = new RegexReplacer(); 
     return replacer.PutSpacesBeforeCaps(input.ToString()); 
    } 
} 
*/}); 
1

你可以在你的正则表达式使用lookarounds:

/(?<![A-Z])[A-Z](?![A-Z])/ 

RegEx Demo

  • (?<![A-Z]) - 负回顾后,声称如果前一个字符是不是一个大写英文字母
  • (?![A-Z]) - 负先行断言如果下一个字符不是大写英文字母

编辑:由于JavaScript不支持回顾后,你可以使用这个表达式:

(?:^|[^A-Z])[A-Z](?![A-Z]) 

RegEx Demo 2

+0

感谢,这正是我需要的,但是我在Javascript中使用此,我怎么能转换呢? –

+0

现在唯一的问题是它匹配大写字母前的空格,它表示捕获组0,但似乎并不存在? –

+0

由于不存在逆序,我们需要使用一个非捕获组,即'(?:^ | [^ A-Z])'。这将匹配行首或任何非大写字母。 – anubhava

相关问题