我有像Japan Company,Chinese Company和這個正則運算式這樣的字串/([A-Z])/g來獲取所有大寫字符,然后加入結果以發出它們。但是當輸入字串不是英文字母時,正則運算式不起作用。
let string = "Japan Company";
console.log(string.match(/[A-Z]/g).join('')); // JC
但是當我有一個字串時日本の會社
let string = "日本の會社";
console.log(string.match(/[A-Z]/g).join(''));
string.match(/[A-Z]/g)由于is的結果,這會引發例外null。
當我試圖省略這些字串并且象形文字沒有大寫時,正則運算式應該只匹配每個單詞的第一個字符,其中單詞用空格分隔。
我應該為此使用什么通用正則運算式?
類似于 POSIX 的東西[:upper:],但這不適用于 JavaScript 正則運算式引擎。
uj5u.com熱心網友回復:
您可以使用
(string.match(/(?<!\S)\S/g) || [string]).join('')
請參閱 JavaScript 演示:
const strings = ["Japan Company", "japan company", "日本の會社"];
for (const string of strings) {
console.log(string, '=>', (string.match(/(?<!\S)\S/g) || [string]).join('').toUpperCase())
}
正(?<!\S)\S則運算式匹配字串開頭或空白字符之后的非空白字符。
Safari,非后視模式:
var strings = ["Japan Company", "japan company", "日本の會社"];
for (var i=0; i<strings.length; i ) {
var m = strings[i].match(/(?:^|\s)(\S)/g)
if (m === null) {
console.log(strings[i], '=> ', strings[i])
} else {
console.log(strings[i], '=>', m.join('').replace(/\s /g, '').toUpperCase())
}
}
uj5u.com熱心網友回復:
根據您的評論,我認為這應該做您想要的。
function getUppercaseLetters(string) {
// Find uppercase letters in the string
let matches = string.match(/[A-Z]/g);
// If there are no uppercase letters, get the first letter of each word
if (!matches) matches = string.split(" ").map(word => word[0]);
// If there are still no matches, return an empty string. This should prevent against any edge cases.
if (!matches) return "";
// Join the array elements and make it uppercase.
return matches.join("").toUpperCase();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/484554.html
標籤:javascript 正则表达式
