JavaScript正则表达式获取句子中每个单词的第一个字符(波斯语和英语句子)
假设我有以下字符串:JavaScript正则表达式获取句子中每个单词的第一个字符(波斯语和英语句子),javascript,regex,Javascript,Regex,假设我有以下字符串: var englishSentence = 'Hellow World'; var persianSentence = 'گروه جوانان خلاق'; 对于英语,我使用下面的正则表达式,但是如何编写正则表达式来支持波斯语,或者混合使用 var matches = englishSentence.match(/\b(\w)/g); acronym = matches.join(''); 根本原因 无法匹配Unicode单词边界,\b即使在ECMA 2018
var englishSentence = 'Hellow World';
var persianSentence = 'گروه جوانان خلاق';
对于英语,我使用下面的正则表达式,但是如何编写正则表达式来支持波斯语,或者混合使用
var matches = englishSentence.match(/\b(\w)/g);
acronym = matches.join('');
根本原因
无法匹配Unicode单词边界,\b
即使在ECMA 2018中也不支持Unicode
解决
对于ECMA2018兼容浏览器(例如,截至2018年4月的最新Chrome版本),您可以使用:
var englishSentence='Hellow World';
var persianSentence=‘گ;
var reg=/(?您可以按空格分割,然后获取每个项目的第一个字符
var output = sentence.split( /\s+/ ).map( s => s.charAt(0) ).join("")
演示
var fnGetFirstChar=(句子)=>句子.split(/\s+/).map(s=>s.charAt(0)).join(“”);
var EnglishEntence=‘Hellow World’;
var persianSentence=‘گ;
log(fnGetFirstChar(englishSentence));
log(fnGetFirstChar(persianSentence));
如果您是在代码中执行此操作,一种方法是使用
(?:\s|^)(\S)
它匹配一个非空格字符(\S
),前面有空格或字符串开头(\S^
),捕获非空格字符以捕获组1
var语句='Hello World\n'+
'گروه جوانان خلاق',
re=/(?:\s | ^)(\s)/g,
结果='';
while(m=执行董事(句子))
{
结果+=m[1];
};
console.log(result);
您最好使用آ
到ی
以及a-z
之间的字符范围,因为JS中的单词边界不能识别多字节字母,而在大多数情况下是这样的
console.log(
匹配(/(|^)[آ-یa-z](?=[آ-یa-z])/gi)。映射(x=>x.trim())。连接(“”)
)
console.log(
匹配(/(| ^)[آ-یa-z](?=[آ-یa-z])/gi)。映射(x=>x.trim())。连接(“”)
)
输出应该是什么样子?试试句子.split(/\s+/).map(s=>s.charAt(0))
对于波斯语,它应该是گج不,我需要它用于旧版本。@jones您应该将一个额外的库导入到您的项目中(>200kb)而且\pL
接受来自所有语言的所有字母,不仅仅是波斯语和英语。它会返回原始句子。你在演示的输出中看到了什么?为了使downvoter更松散,我对这个答案投了更高的票。+1谢谢,我对你和classGLOL也投了同样的票!是否有机器人downvoting…?发布后大约一秒钟得到-1:DSeems成为ca今天是se!为了让downvoter更松散,我把这个答案投了更高的分数。+1