2016-11-21 14 views
0

文字を一致させようとしていますが、大文字は1つだけ一致させる必要があります。たとえば :大文字を1つだけ一致させる正規表現

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

は、これまでのところ私は/(?![A-Z]{1})/gを持っているが、私は否定先読みが何であるかを誤解したと思います。

ありがとうございます!

答えて

0

私は、AC#を呼び出すためにEdge.jsを使用して、この問題を解決するために管理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

あなたの正規表現で前後参照を使用することができます。

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

RegEx Demo

  • (?<![A-Z]) - 負の後読みを、前の文字が大文字の英字
  • (?![A-Z])ない場合はアサート - 、否定先読みアサート次の文字が大文字の英字でない場合

EDIT: Javascriptが後読みをサポートしていないので、あなたがこの正規表現を使用することができます。

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

RegEx Demo 2

+0

私は必要な正確に何だおかげで、しかし、私はこれを変換することができるか、JavaScriptでこれを使用していますか? –

+0

ここで問題になるのは、大文字の前のスペースにマッチしているということです。キャプチャグループ0とは言いますが、存在しないようですか? –

+0

見た目の欠如のため、キャプチャしていないグループ、つまり '(?:^ | [^ A-Z])'を使用する必要があります。これは、行頭または大文字ではないものと一致します。 – anubhava

関連する問題