Tengo un escenario como Necesito editar los valores de comillas simples (solo valores de comillas simples),
Así que extraje los valores de comillas simples usando expresiones regulares y preparé la forma dinámica reactiva.
Al hacer clic en el botón de edición, se mostrará el nombre del paso anterior arriba, el nombre del nuevo paso debajo, el paso de envío reemplazará el nombre del paso en la matriz original.
Funcionó bien como se esperaba en algunos escenarios de acuerdo con mi enfoque, pero en los escenarios, me di cuenta de que cualquier algoritmo que estoy siguiendo no cumple con mis requisitos.
A continuación se muestran los casos de prueba.
Caso de prueba 1: Nombre del paso: "Entonces debería contratar a un empleado usando el perfil '1' para 'EE. UU.'", // Aquí --> '1', los valores de 'EE. UU.' son editables
Caso de prueba 2: "Y el empleado debe ser contratado el día '01' del período de pago '01' de 'Actual' fiscal" // '01', '01', 'Actual'
Problemas: en el caso de prueba 2, si traté de editar el segundo 01, está editando el primer 01
Intento resolver la función de edición de ejecución con la ayuda de indexof, funciones de subcadena
this.replaceString = this.selectedStep.name; this.metaArray.forEach((element: any) => { var metaIndex = this.replaceString.indexOf(element.paramValue); if (metaIndex !== -1) { const replaceValue = this.stepEditForm.controls[element['paramIndex']].value; this.replaceString = this.replaceString.substring(0, metaIndex) + replaceValue + this.replaceString.substring(metaIndex + (element.paramValue.length)); } });pero en indexof siempre encuentra la primera aparición de un valor en una cadena. Así que me di cuenta de que mi enfoque es incorrecto al realizarlo.
por favor encuentre el archivo adjunto para el código
https://stackblitz.com/edit/angular-reactive-forms-cqb9hy?file=app%2Fapp.component.ts
Entonces, ¿alguien puede sugerirme cómo resolver este problema?
Gracias por adelantado
Agregué una función llamada matchStartingPositions que devuelve los índices de posición inicial de cada partido. Usando este método, puede realizar su edición reemplazando la cadena tal como lo hace, pero encontraremos la coincidencia adecuada para ser reemplazada en la posición dada.
Así que en tu línea
var metaIndex = this.replaceString.indexOf(element.paramValue);luego podemos agregar un segundo parámetro a indexOf, ese es el punto de partida:
var metaIndex = this.replaceString.indexOf(element.paramValue, startingPositions[element.paramIndex]);La función para obtener las posiciones del índice solo busca esas comillas simples en una cadena dada:
matchStartingPositions(str) { let count = 0; let indices = []; [...str].forEach((val, i) => { if (val === "'") { if (count % 2 == 0) { indices.push(i); } count++; } }); return indices; }Aquí está en acción:
https://angular-reactive-forms-xhkhmx.stackblitz.io
https://stackblitz.com/edit/angular-reactive-forms-xhkhmx?file=app/app.component.ts