2016-11-21 6 views
0

Я пытаюсь совместить символы, но мне нужно соответствовать только прописным буквам. Например:regex, чтобы соответствовать только одной заглавной букве

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

До сих пор я /(?![A-Z]{1})/g, но я думаю, что я неправильно истолкованы, что отрицательный предпросмотр есть.

Спасибо!

ответ

0

мне удалось исправить это с помощью 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

Вы можете использовать lookarounds в своем регулярном выражении:

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

RegEx Demo

  • (?<![A-Z]) - Negative 'назад, утверждает, если предыдущий символ не является прописной английская буква
  • (?![A-Z]) - Отрицательный опережения, утверждает если следующий символ не является прописной буквой на английском языке

EDIT: Так как JavaScript не поддерживает назад ', вы можете использовать это регулярное выражение:

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

RegEx Demo 2

+0

спасибо, что именно то, что мне нужно, но я использую это в Javascript, как я мог бы преобразовать это? –

+0

Единственная проблема теперь в том, что она соответствует пробелу перед заглавной буквой, когда она есть, говорит группа захвата 0, но это, похоже, не существует? –

+0

Из-за отсутствия lookbehind нам нужно будет использовать группу, не связанную с захватом i.e. '(?:^| [^ A-Z])'. Это будет соответствовать началу строки или чему-либо, что не является большой буквы. – anubhava