0
我想匹配字符,但我只需要匹配單個大寫字母。 例如:只匹配一個大寫字母的正則表達式
'Hello World' - 2 matches
'Hello WOrld' - 1 match
'HEllo WOrld' - 0 matches
到目前爲止,我有/(?![A-Z]{1})/g
但我想我已經誤解負前瞻是什麼。
謝謝!
我想匹配字符,但我只需要匹配單個大寫字母。 例如:只匹配一個大寫字母的正則表達式
'Hello World' - 2 matches
'Hello WOrld' - 1 match
'HEllo WOrld' - 0 matches
到目前爲止,我有/(?![A-Z]{1})/g
但我想我已經誤解負前瞻是什麼。
謝謝!
我設法用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());
}
}
*/});
你可以在你的正則表達式使用lookarounds:
/(?<![A-Z])[A-Z](?![A-Z])/
(?<![A-Z])
- 負回顧後,聲稱如果前一個字符是不是一個大寫英文字母(?![A-Z])
- 負先行斷言如果下一個字符不是大寫英文字母編輯:由於JavaScript不支持回顧後,你可以使用這個表達式:
(?:^|[^A-Z])[A-Z](?![A-Z])
感謝,這正是我需要的,但是我在Javascript中使用此,我怎麼能轉換呢? –
現在唯一的問題是它匹配大寫字母前的空格,它表示捕獲組0,但似乎並不存在? –
由於不存在逆序,我們需要使用一個非捕獲組,即'(?:^ | [^ A-Z])'。這將匹配行首或任何非大寫字母。 – anubhava