Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

415
Visualizações
RegEx para detectar una cadena y una ruta de una sola vez

Aquí hay un ejemplo de qué expresiones regulares necesito expresiones regulares

tengo muchas de estas lineas en un archivo

 build test/testfoo/CMakeFiles/testfoo2.dir/testfoo2.cpp.o: CXX_COMPILER__testfoo2_Debug /home/juxeii/projects/gtest-cmake-example/test/testfoo/testfoo2.cpp || cmake_object_order_depends_target_testfoo2

Necesito detectar la cadena entre CXX_COMPILER__ y _Debug , que aquí es testfoo2 .

Al mismo tiempo, también necesito detectar la ruta completa del archivo /home/juxeii/projects/gtest-cmake-example/test/testfoo/testfoo2.cpp , que viene siempre después de la primera coincidencia.

No pude encontrar una expresión regular para esto. Hasta ahora tengo .*CXX_COMPILER__(.\w+)_\w+|(\/[a-zA-Z_0-9-]+)+\.\w+ y lo estoy usando en mecanografiado así:

 const fileAndTargetRegExp = new RegExp('.*CXX_COMPILER__(.\w+)_\w+|(\/[a-zA-Z_0-9-]+)+\.\w+', 'gm'); let match; while (match = fileAndTargetRegExp.exec(fileContents)) { //do something }

Pero no tengo coincidencias. ¿Hay una forma fácil de hacer esto?

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

¿Tendrá siempre el || <stuff here> al final? Si es así, esta expresión regular basada en la que proporcionó debería funcionar:

/.*CXX_COMPILER__(\w+)_.+?((?:\/.+)+) \|\|.*/g

Como muestra el desglose de regex101 , el primer grupo de captura debe contener la cadena entre CXX_COMPILER__ y _Debug , mientras que el segundo debe contener la ruta, usando el espacio y las canalizaciones para detectar dónde termina el último.

 let line = 'build test/testfoo/CMakeFiles/testfoo2.dir/testfoo2.cpp.o: CXX_COMPILER__testfoo2_Debug /home/juxeii/projects/gtest-cmake-example/test/testfoo/testfoo2.cpp || cmake_object_order_depends_target_testfoo2'; const matches = line.match(/.*CXX_COMPILER__(\w+)_.+?((?:\/.+)+) \|\|.*/).slice(1); //slice(1) just to not include the first complete match returned by match! for (let match of matches) { console.log(match); }

Si las tuberías no siempre estarán allí, esta versión debería funcionar en su lugar (regex101) :

.*CXX_COMPILER__(\w+)_.+?((?:\/(?:\w|\.|-)+)+).*

Pero requiere que agregue todos los caracteres de ruta válidos individualmente cada vez que se dé cuenta de que podría haber uno nuevo, y deberá asegurarse de que las rutas no tengan espacios porque agregar espacio a la expresión regular haría que detecte el cosas después del camino también.

about 4 years ago · Juan Pablo Isaza Relatório

0

Aquí está mi forma de hacerlo con replace :

Necesito detectar la cadena entre CXX_COMPILER__ y _Debug, que está aquí testfoo2.

Intente reemplazar todos los caracteres de la cadena con solo el primer grupo capturado $1 que se encuentra entre CXX_COMPILER__ y _Debug :

 /.*CXX_COMPILER__(\w+)_Debug.*/ ^^^^<--testfoo2

También necesito detectar la ruta completa del archivo /home/juxeii/projects/gtest-cmake-example/test/testfoo/testfoo2.cpp

Lo mismo, solo que esta vez reemplace todo, simplemente deje el segundo grupo coincidente, que es cualquier cosa que viene después de nuestro primer grupo capturado:

 /.*CXX_COMPILER__(\w+)_Debug\s+(.*?)(?=\\|\|).*/ ^^^<-- /home/.../testfoo2.cpp 

 let line = 'build test/testfoo/CMakeFiles/testfoo2.dir/testfoo2.cpp.o: CXX_COMPILER__testfoo2_Debug /home/juxeii/projects/gtest-cmake-example/test/testfoo/testfoo2.cpp || cmake_object_order_depends_target_testfoo2' console.log(line.replace(/.*CXX_COMPILER__(\w+)_Debug.*/gm,'$1')) console.log(line.replace(/.*CXX_COMPILER__(\w+)_Debug\s+(.*?)(?=\\|\|).*/gm,'$2'))

about 4 years ago · Juan Pablo Isaza Relatório

0

Se ve bien, pero necesita delimitadores. Agregue "/" antes y después de Regex, sin comillas.

 let fileContents = 'build test/testfoo/CMakeFiles/testfoo2.dir/testfoo2.cpp.o: CXX_COMPILER__testfoo2_Debug /home/juxeii/projects/gtest-cmake-example/test/testfoo/testfoo2.cpp || cmake_object_order_depends_target_testfoo2'; const fileAndTargetRegExp = new RegExp(/.*CXX_COMPILER__(.\w+)_\w+|(\/[a-zA-Z_0-9-]+)+\.\w+/, 'gm'); let match; while (match = fileAndTargetRegExp.exec(fileContents)) { console.log(match); }

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda