He creado una función en un módulo personalizado para tratar de hacer un formato de fecha/hora usando las plantillas presentadas por NetSuite de las preferencias de la empresa. Sin embargo, tuve algunos problemas al manejar el nombre completo del mes y la hora en formato de 12 horas. Si uso un lookbehind negativo, funciona bien, pero el problema es que solo funciona en scripts que usan 2.1, y hay demasiados en 2.0 para actualizar todo lo que necesita esta función de 2.0 a 2.1.
Por ejemplo, estas plantillas de tiempo particulares:
Month D, YYYY h:mmEl primero tendrá una salida adecuada como:
February 11, 2022Pero el segundo tendrá una salida errónea:
h:15Estoy usando el siguiente RegEx para que coincida con el marcador de posición de la hora:
/^(?!nt)h/Y sé que esto funciona mejor donde puedo usarlo:
/(?<!nt)h/Intenté buscar una forma de manejar la coincidencia de la "h" donde no está precedida por "nt", pero todos siguen señalando el uso de un lookbehinds negativo para manejarlo, o no están un poco claros en cuanto a exactamente cómo se está haciendo
EDITAR
Solo para reducir la confusión, los siguientes son formatos que también podrían pasarse a la función y deben manejarse correctamente:
YYYY/DD/MM h:m:s MONTH DD, YYYY H-mm-ss YYYYDDMMhms YYYYDDMM-HHmmssNo hay una plantilla de fecha/hora específica que se pueda pasar, por lo que existe una necesidad específica de poder encontrar H/h sin que sea parte de la palabra 'Mes'.
En su lugar, puede usar un grupo de captura para capturar lo que desea conservar y hacer coincidir lo que desea eliminar.
El patrón coincide con el nth que no desea y captura un carácter h .
En el código, puede verificar si el grupo 1 está presente.
nth|(h)Demostración de expresiones regulares
Por ejemplo en Javascript
const regex = /nth|(h)/gi; const str = `Month D, YYYY h:mm February 11, 2022 h:15 YYYY/DD/MM h:m:s MONTH DD, YYYY H-mm-ss YYYYDDMMhms YYYYDDMM-HHmmss`; const result = str.replace(regex, function(m, g1) { return g1 !== undefined ? "[" + g1 + "]" : m; }); console.log(result);Puedes usar
/h(?!(?<=\bMonth)\b)/giVea la demostración de expresiones regulares . Detalles :
h - una letra h(?!(?<=\bMonth)\b) - una búsqueda anticipada negativa que falla la coincidencia si inmediatamente a la izquierda de la ubicación actual hay una palabra Month completa. Si no le importa si la palabra Month es una palabra completa, puede usar
/h(?<!Month)/gi