正则表达式只匹配一个大写字母

时间:2016-11-21 16:45:48

标签: javascript regex

我试图匹配字符,但我只需匹配单个大写字母。 例如:

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

到目前为止,我有/(?![A-Z]{1})/g但我认为我误解了一个消极的前瞻。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以在正则表达式中使用外观:

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

RegEx Demo

  • (?<![A-Z]) - 负面的背后,如果前一个字符不是大写的英文字母则断言
  • (?![A-Z]) - 否定前瞻,如果下一个字符不是大写英文字母则断言

编辑:由于Javascript不支持lookbehind,您可以使用此正则表达式:

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

RegEx Demo 2

答案 1 :(得分:0)

我设法通过使用Edge.js从Node调用c#函数来解决这个问题,这让我可以绕过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());
    }
 }
 */});