Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单词中每个第一个字符和任何大写字母的正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 单词中每个第一个字符和任何大写字母的正则表达式

Javascript 单词中每个第一个字符和任何大写字母的正则表达式,javascript,regex,Javascript,Regex,REGEX试图构建一个能够检索单词的第一个字母、该单词的任何其他大写字母以及每个第一个字母(包括同一单词中的任何大写字母)的正则表达式时遇到了麻烦 "WelcomeBack to NorthAmerica a great place to be" = WBTNAAGPTB "WelcomeBackAgain to NorthAmerica it's nice here" = WBATNAINH "Welcome to the NFL, RedSkins-Dolphins play today"

REGEX试图构建一个能够检索单词的第一个字母、该单词的任何其他大写字母以及每个第一个字母(包括同一单词中的任何大写字母)的正则表达式时遇到了麻烦

"WelcomeBack to NorthAmerica a great place to be" = WBTNAAGPTB
"WelcomeBackAgain to NorthAmerica it's nice here" = WBATNAINH
"Welcome to the NFL, RedSkins-Dolphins play today" = WTTNFLRSDPT
尝试使用此JUS获得前2个匹配项:

/([A-Z])|\b([a-zA-Z])/g

欢迎提供任何帮助,谢谢

您需要一个正则表达式,该正则表达式将匹配所有大写字母和出现在字符串开头或空格后的小写字母:

var re=/[A-Z]+|(?:^|\s)([A-Z])/g;
var strs=[“欢迎回到北美,这是一个很棒的地方”,“欢迎回到北美,这里很好”,“欢迎来到NFL,红人海豚队今天比赛”];
用于(STR的var s){
var res=“”;
while((m=re.exec))!==null){
if(m[1]){
res+=m[1].toUpperCase();
}否则{
res+=m[0];
}
}
控制台日志(res);
}
试试这个:

let s = "WelcomeBack to NorthAmerica a great place to be";
s = s.match(/([A-Z])|(^|\s)(\w)/g);    // -> ["W","B"," t", " N"...]
s = s.join('');                        // -> 'WB t N...'
s = s.replace(/\s/g, '');              // -> 'WBtN...'
return s.toUpperCase();                // -> 'WBT ...'
/(?:([A-Z])|\b(\w))/g
匹配字符串开头的每个大写字母
([A-Z])
每个字母
(\w)
,或空格
\s


(由于某种原因,我无法不捕获空格,因此执行了
替换
步骤。当然有更好的技巧,但这是我发现的最可读的了。)

您可以使用regex作为:
/\b[a-z]|[a-z]+/g


JavaScript字符串匹配()方法
var str=“Welcome to NorthAmerica a a great place to be”;
var re=/\b[a-z]|[a-z]+//g;
找到的变量=str.match(re);
found.forEach(函数(项、索引){
找到[index]=item.toUpperCase();
});
document.write(found.join(“”));

您可以试试这个,它还可以处理空白

str = str.match(/([A-Z])|(^|\s)(\w)/g);
str = str.join('');
str=str.replace(/ /g,'');
return str.toUpperCase();

是JavaScript吗?参考这里,我已经看到每种语言的正则表达式都不同,所以我只包括了我正在使用的语言。但是问题主要是REGEXThanks,@Sampad,但是“?如果这很容易,那么整个代码可能就是一行代码。在发布我的答案之前,我已经尝试过这种方法。第二个示例字符串应该返回
WBATNAINH
,并且。不需要将捕获组包装在另一个组中,即可使OR工作。没有它也一样。出于某种原因,我无法不捕获空白-原因是JS regex引擎不支持lookbehinds:(太奇怪了……我的意思是你不能捕获其他东西,对吧?为什么空白需要lookbehinds?@HumanCatfood它不是“空白”,真的。使用
(?:)很难捕获内容
但是,
regex.exect
将返回索引0处匹配的所有内容。这包括非捕获组。捕获组然后放置在返回数组中的其余索引中。排除匹配内容的唯一方法是使用零长度匹配-这些内容将不匹配,因此不会在索引0处返回o、 lookback是一种零长度匹配,但是JS不支持它。您可以通过反转字符串和正则表达式,然后使用lookahead来模拟它。通过捕获大写字符,代码可以稍微简化,这意味着可以删除
if
语句,因为循环将简单地收集所有捕获的字符将内容转换为字符串(
m.slice(1).find(x=>x)
),然后是整个结果的大写。这将在
的同时
循环中减少4行,因此
for
循环的大小将几乎是原来的一半。谢谢,@wiktor,它的效果很好。解释得很好!请尝试
欢迎再次返回北美,这里很好
,经过一些编辑,您将得到一个解决方案n靠近我的或HumanCatford的。