Expresión regular de JavaScript para obtener el primer carácter de cada palabra en una oración (oraciones en persa y en inglés)

Supongamos que tengo la siguiente cadena:

var englishSentence = 'Hellow World'; var persianSentence = 'گروه جوانان خلاق'; 

Para el inglés lo uso a partir de las expresiones regulares, pero ¿cómo puedo escribir una expresión regular para admitir persa, o una mezcla de ellas?

  var matches = englishSentence.match(/\b(\w)/g); acronym = matches.join(''); 

Causa principal

No hay forma de hacer coincidir un límite de palabra Unicode, \b no es compatible con Unicode incluso en ECMA 2018.

Soluciones

Para los navegadores compatibles con ECMA2018 (por ejemplo, las últimas versiones de Chrome a partir de abril de 2018) puede usar:

 var englishSentence = 'Hellow World'; var persianSentence = 'گروه جوانان خلاق'; var reg = /(? 

Puede dividir por espacio (s) y luego obtener el primer carácter de cada elemento

 var output = sentence.split( /\s+/ ).map( s => s.charAt(0) ).join("") 

Manifestación

 var fnGetFirstChar = (sentence) => sentence.split( /\s+/ ).map( s => s.charAt(0) ).join(""); var englishSentence = 'Hellow World'; var persianSentence = 'گروه جوانان خلاق'; console.log( fnGetFirstChar( englishSentence ) ); console.log( fnGetFirstChar( persianSentence ) ); 

Si estás haciendo esto en código, una forma de hacerlo es con

 (?:\s|^)(\S) 

Coincide con un carácter de espacio no blanco ( \S ) precedido por un espacio en blanco O al principio de la cadena ( \s|^ ), capturando el carácter de espacio no blanco para capturar el grupo 1.

 var sentence = 'Hello World\n'+ 'گروه جوانان خلاق', re = /(?:\s|^)(\S)/g, result = ''; while( m = re.exec(sentence) ) { result += m[1]; }; console.log( result ); 

Será mejor que uses un rango de caracteres de آ a ی junto con az ya que el límite de una palabra en JS no reconoce las letras multibyte, mientras que en la mayoría de los casos lo hace.

 console.log( "سلام حالت چطوره؟".match(/( |^)[آ-یa-z](?=[آ-یa-z])/gi).map(x => x.trim()).join('') ) console.log( "این یک test است".match(/( |^)[آ-یa-z](?=[آ-یa-z])/gi).map(x => x.trim()).join('') )