Le aconsejaría que mire (y, si lo desea, sus comentarios) sobre el método que está utilizando para recuperar la información del sitio web, ya que la mejor opción y la más confiable sería utilizar un método diferente para que usted no tiene que lidiar con el ReactJS
de los comentarios en absoluto.
Si hubiera incluido esa parte de su AppleScript junto con el resto, podría haber sido una oportunidad para resolver su problema desde su origen.
No obstante, aquí hay un método para eliminar las etiquetas de las cadenas de texto, aunque de ninguna manera es el único método, ni necesariamente el más elegante o eficiente. Pero está razonablemente limpio y, suponiendo que todas las etiquetas sean simples etiquetas de comentario ReactJS
, hará un trabajo confiable.
set string1 to "<!-- react-text: 45 -->“<!-- /react-text --><!-- \nreact-text: 46 -->Megan Fox<!-- /react-text --><!-- react-text: 47 -- \n>”<!-- /react-text -->"
set string2 to "<!-- react-text: 477 -->“<!-- /react-text --><!-- react-text: 478 -->iPhone 8<!-- /react-text --><!-- react-text: 479 -->”<!-- /react-text -->"
stripTags from string1 --> "“Megan Fox”"
stripTags from string2 --> "“iPhone 8”"
--------------------------------------------------------------------------------
to stripTags from s as text
local s
# Eliminate linebreaks and join to form one line of text
set the text item delimiters to {null, linefeed, return}
set s to the text items of s as text
# Use bash to isolate all the various tags within the string
# Note: not suitable for tags with irregular content, such as
# any that unexpectedly contain '<' or '>' as part of their
# text content. However, that shouldn''t be an issue here.
do shell script "egrep -io -e '<[^>]+>' <<<" & the quoted form of s
# Use the tags as a basis for elimination using AS's TIDs
set the text item delimiters to {null} & paragraphs of the result
set s to the text items of s as text
return s
end stripTags
string1
es una copia de su variable FirstTitle
, incluidos los saltos de línea que contenía (no estoy seguro de si estos se encontraban en su intencionalidad o un elemento de cuando copió su script en el navegador); su presencia o ausencia no afecta la eficacia de mi script, sino que simplemente necesitó las dos líneas al comienzo del controlador stripTags
que se deshace de ellas.
string2
es el texto que proporcionaste al final de tu pregunta.
He mostrado la salida de cada uno de estos procesos siguientes. Conservé las dobles citas "inteligentes" que forman parte de la cadena y se encuentran fuera de las etiquetas; Me di cuenta de que habías optado por eliminarlos, pero su presencia aquí, simplemente con fines de demostración, es una buena garantía visual de que el script se enfoca solo en las etiquetas y preserva el texto intermedio. Espero que no te importe si te dejo esas citas inteligentes para que las manejes como desees.
Avísame si tienes alguna consulta.
AGREGADO 2018-05-12:
@cjeccjec Gracias por actualizar la información del sitio web con la URL correcta. Consejo para la próxima vez: incluya el código que está usando para obtener el título. Será más fácil para las personas ayudarlo y también atraerá más ayuda.
Por suerte, este problema parece bastante sencillo. Usar getElementsByClassName()
es una buena idea, e incluso logró identificar el nombre de clase de interés, term-keyword__keyword
. Bien hecho.
Los elementos asignados a ese nombre de clase son <p>
elementos. Ellos sí tienen una propiedad title
, pero está vacía, así que sospecho que no es lo que estás usando ni lo que buscas en absoluto.
También tienen una propiedad llamada textContent
, que, como sugiere, devuelve el texto contenido dentro del elemento, es decir, las etiquetas de los elementos que se comparan en este juego. Creo que eso es lo que buscas, y está completamente libre de etiquetas ReactJS
.
Este código devuelve una matriz de las propiedades textContent
de las tres etiquetas p.term-keyword__keyword
cargadas en el sitio en cualquier momento: las dos actualmente visibles y en juego se están comparando; y una fuera de la pantalla a la derecha, esperando para desplazarse a la vista para la próxima comparación.
Array.from(document
.getElementsByClassName('term-keyword__keyword'),
e=>e.textContent.slice(1,-1)
);
También me tomé la libertad de cortar las citas desde el principio y el final de los textos.
Incorpore esto en AppleScript de esta forma:
tell application "Safari" to set labels ¬
to do JavaScript "Array.from(document" & ¬
".getElementsByClassName('term-keyword__keyword')," & ¬
"e=>e.textContent.slice(1,-1));" in the front document
--> {"Microsoft Word", "Moobs", "Malaysia"}
item 2 of labels --> "Moobs"
Esos fueron los resultados que obtuve mientras jugaba el juego. Estaba tratando de adivinar si "Microsoft Word" o "Moobs" tenían más búsquedas en Internet, que obtuve correctamente; luego "Malasia" se desplazó a la vista, como ya sabía. "
Al usar este método, no es necesario quitar ninguna etiqueta ReactJS
, ni ninguna comilla.