Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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,假设我有以下字符串: 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