¿Cómo construiría una expresión regular para obtener el índice de un carácter alfanumérico precedido por un carácter no alfanumérico ?
Ejemplos:
Sé que JavaScript puede proporcionar el índice de la coincidencia así:
const index = string.match(/regular_expression/)?.index || 0;No puedo entender cómo construir una expresión que haga lo que he descrito.
Si esta parte (S debería producir el índice 1, creo que esta parte {(S debería producir el índice 2 en lugar de 3.
Puede hacer coincidir ambos caracteres y capturar el segundo carácter usando un grupo de captura y luego agregar 1 para obtener el índice.
Puede usar una aserción de búsqueda posterior si es compatible y luego no necesita la adición adicional de 1.
Como patrón puedes combinar:
[^a-zA-Z\d\s]([a-zA-Z\d])El patrón coincide:
[^a-zA-Z\d\s] Coincide con un solo carácter que no sea alfanumérico o un carácter de espacio en blanco([a-zA-Z\d]) Captura un único carácter alfanumérico en el grupo 1Vea una demostración de expresiones regulares .
const regex = /[^a-zA-Z\d\s]([a-zA-Z\d])/; [ "(Special Edition)", "Special Edition", "{(Special Edition)}", ].forEach(s => { const m = s.match(regex); if (m) { console.log(`${s} --> ${m[1]} index: ${m.index + 1}`); } })Use el método positivo de búsqueda posterior y String.prototype.search :
'(Special Edition)'.search(/(?<=[^A-Za-z0-9\s])[A-Za-z0-9]/); // 1 'Special Edition'.search(/(?<=[^A-Za-z0-9\s])[A-Za-z0-9]/); // -1 '{(Special Edition)}'.search(/(?<=[^A-Za-z0-9\s])[A-Za-z0-9]/); // 2