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