Tengo una propiedad de objeto JSON que es una cadena y se ve así:
"&1 *UBIN 8 &2 *UBIN 8 &3 *UBIN 8 &4 *CHAR 10 &5 *UBIN 8 &6 *UBIN 8 &7 *UBIN 8 &8 *CCHAR *VARY 4"Quiero analizar esta propiedad (cadena) para extraer los números que tienen un & (ampersand) delante de ellos, y colocar cada &número extraído en una matriz. El resultado se vería así:
var array = ['&1', '&2', '&3', '&4', '&5', '&6', '&7', '&8'];Estoy usando AngularJS.
¿Alguna sugerencia sobre la mejor manera de lograr esto?
prueba esto
var str="&1 *UBIN 8 &2 *UBIN 8 &3 *UBIN 8 &4 *CHAR 10 &5 *UBIN 8 &6 *UBIN 8 &7 *UBIN 8 &8 *CCHAR *VARY 4"; var result = $.map(str.split(" "), function(element) { if ( element.substring(0,1) == "&") return element; });resultado
["&1","&2","&3","&4","&5","&6","&7","&8"]El algoritmo para esto sería "split() and filter()".
Un enfoque ingenuo podría verificar si el primer carácter es un ampersand:
input = "&1 *UBIN 8 &2 *UBIN 8 &3 *UBIN 8 &4 *CHAR 10 &5 *UBIN 8 &6 *UBIN 8 &7 *UBIN 8 &8 *CCHAR *VARY 4" input.split(" ").filter(item => item.startsWith("&")) Esto funciona bien y es rápido, pero supone que solo pueden aparecer números después & , por lo que también devolverá elementos como &abc .
También podrías usar una expresión regular:
input.split(" ").filter(item => item.match(/^&\d+$/)) Esto es más lento, pero es más robusto. También supone que solo se permiten elementos con números completos, por lo que rechazará elementos como &12a .
Ambas soluciones se pueden adaptar si la lista completa de requisitos difiere, ya que la pregunta no queda del todo clara si:
& contienen solo números, o también pueden contener otros caracteres