2016-11-21 604 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

相關問題