Quería extraer :privacy y :date de la cadena de ejemplo a continuación.
Quería tener una restricción de expresiones regulares que describiera que un bloque :[^:\s]+ (por ejemplo, :privacy o :date ) solo puede terminar con un espacio \s o una nueva línea \n o un final de cadena $ (entonces Podré tener una regla para dividir lógicamente estos bloques en los pasos posteriores).
Así que simplemente pongo (?:$|\n|\s) al final de la expresión regular, pero no funciona para mí (la tercera expresión regular a continuación). Verifiqué dos veces que funciona cuando pongo \s o $ por separado (la primera y la segunda expresión regular a continuación), ahora no tengo idea de cómo puedo implementarlo. Gracias por tu ayuda.
'note::tmp hogehoge. :privacy :date'.match(/\s:[^:\s]+\s/g) (1) [' :privacy '] 'note::tmp hogehoge. :privacy :date'.match(/\s:[^:\s]+$/g) (1) [' :date'] 'note::tmp hogehoge. :privacy :date'.match(/\s:[^:\s]+(?:$|\n|\s)/g) (1) [' :privacy ']Puede usar el patrón de expresión regular a continuación para que coincida con un patrón de bloque: [^:\s+]+ terminado por un espacio \s o una nueva línea \n o un final de cadena $
/((:[^:\s+]+)(?:[\s\n]))|(:[^:\s+]+)(?:[\s\n])?$/gm (?:[\s\n]) - will check if the block is being followed by a space or a new line (:[^:\s+]+)(?:[\s\n])?$ - will check if the block is at the end of string or not.también puede usar la técnica de búsqueda para lograr el mismo resultado
(:[^:\s+]+)(?=\s|\n|$)En su patrón \s:[^:\s]+\s está haciendo coincidir los caracteres de espacios en blanco iniciales y finales.
Lo que podría hacer es afirmar un límite de espacio en blanco usando (?!\S) a la derecha.
Para obtener el valor sin el carácter de espacio en blanco inicial, puede usar un grupo de captura.
\s(:[^:\s]+)(?!\S)Demostración de expresiones regulares
const s = "note::tmp hogehoge. :privacy :date"; const regex = /\s(:[^:\s]+)(?!\S)/g; const result = Array.from(s.matchAll(regex), m => m[1]); console.log(result);