Use RegEx on a Function node

Hello,
I want to match a string from an HTML source code. I want to get everything in between "articleBody":" and "," (which can be a very large text) from a previously downloaded HTML source code via HTTP Request node.

I have this Regular Expression that works fine on Integromat and other RegEx testers:

"articleBody":"(.*?)","

How can I use it on n8n? I tried with a Function node and this code:

let source = $node["Get HTML"].json["data"];
let articleBody = RegExp(/"articleBody":"(.*?)","/).exec(source);

return {json: articleBody};

But I get this error: Always an Array of items has to be returned.

Sorry because I have very little idea of Javascript, and maybe it is something very easy to solve… :confused:

Thanks!

Change return {json: articleBody}; to return [ { json: { articleBody } } ].

1 Like

Now it works, thank you! :smile:

The only problem is that the RegEx result includes the "articleBody":" part of the text, and is not supposed to be returned, as it is not on the group.

I’ve seen this is something specific for RegEx on Javascript. How can it be solved? I’ve tried different ways…

Thanks!

Great that it worked.

Can you share the HTML or at least a simplified version of it?

Sure, the source code for this page, for example.

Here’s the useful part:

<!DOCTYPE html><html amp="amp"><head><title>Las cuatro nuevas calles del Eixample no tendrán asfalto | Cataluña | EL PAÍS</title><meta name="lang" content="es"/><meta name="author" content="Clara Blanchar"/><meta name="robots" content="index,follow,max-image-preview:large"/><meta name="description" content="El Ayuntamiento de Barcelona presenta los proyectos ganadores para los futuros ejes verdes y plazas del distrito central de la ciudad"/><meta name="news_keywords" content="Cataluña, Barcelona, Eixample, Cerdà, Urbanismo, Planes urbanísticos, Espacio público, Programa Supermanzanas, Janet Sanz"/><meta name="date" scheme="W3CDTF" content="2021-03-03T11:41:05.819Z"/><meta name="organization" content="Ediciones EL PAÍS S.L."/><meta property="article:modified_time" content="2021-03-03T11:41:05.819Z"/><meta property="article:published_time" content="2021-03-03T11:41:05.819Z"/><meta property="article:publisher" content="https://www.facebook.com/elpais"/><meta property="fb:app_id" content="94039431626"/><meta property="og:title" content="Las cuatro nuevas calles del Eixample no tendrán asfalto"/><meta property="og:description" content="El Ayuntamiento de Barcelona presenta los proyectos ganadores para los futuros ejes verdes y plazas del distrito central de la ciudad"/><meta property="og:image" content="https://imagenes.elpais.com/resizer/NeVaO-fcSTB6i09gtfa-ORhYjK0=/1200x0/cloudfront-eu-central-1.images.arcpublishing.com/prisa/3VW52MBXCBA63P2JW5ZRR4UWX4.jpg"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="850"/><meta property="og:updated_time" content="2021-03-03T11:41:05.819Z"/><meta property="og:url" content="https://elpais.com/espana/catalunya/2021-03-03/las-cuatro-nuevas-calles-del-eixample-no-tendran-asfalto.html"/><meta property="og:type" content="article"/><meta property="og:site_name" content="EL PAÍS"/><meta property="og:article:publisher" content="EL PAÍS"/><meta property="og:article:author" content="Clara Blanchar"/><meta property="article:section" content="Cataluña"/><meta property="article:tag" content="Cataluña"/><meta property="article:tag" content="Barcelona"/><meta property="article:tag" content="Eixample"/><meta property="article:tag" content="Cerdà"/><meta property="article:tag" content="Urbanismo"/><meta property="article:tag" content="Planes urbanísticos"/><meta property="article:tag" content="Espacio público"/><meta property="article:tag" content="Programa Supermanzanas"/><meta property="article:tag" content="Janet Sanz"/><meta property="twitter:title" content="Las cuatro nuevas calles del Eixample no tendrán asfalto"/><meta property="twitter:card" content="summary_large_image"/><meta property="twitter:site" content="@el_pais"/><link rel="alternate" href="https://feeds.elpais.com/mrss-s/list/ep/site/elpais.com/section/espana/subsection/catalunya" type="application/rss+xml" title="RSS sobre Cataluña"/><link rel="alternate" hrefLang="es-ES" href="https://elpais.com/espana/catalunya/2021-03-03/las-cuatro-nuevas-calles-del-eixample-no-tendran-asfalto.html"/><title>EL PAÍS: el periódico global</title><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><link rel="preload" as="script" href="https://cdn.ampproject.org/v0.js"/><link rel="preload" href="https://elpais.com/pf/resources/fonts/benton/bentonsans-black-webfont.woff?d=885" as="font"/><link rel="preload" href="https://static.elpais.com/dist/resources/fonts/majerit/majerittext-bolditalic-webfont.woff" as="font"/><link href="http://assets.adobedtm.com/" rel="preconnect"/><script async="" src="https://cdn.ampproject.org/v0.js"></script><link rel="canonical" href="https://elpais.com/espana/catalunya/2021-03-03/las-cuatro-nuevas-calles-del-eixample-no-tendran-asfalto.html"/><style amp-boilerplate="">body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate="">body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript><script type="application/ld+json">[{"@context":"http://schema.org/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":{"@id":"https://elpais.com","name":"EL PAÍS: el periódico global","@type":"CollectionPage"},"position":1},{"@type":"ListItem","item":{"@id":"https://elpais.com/espana/","name":"Cataluña","@type":"CollectionPage"},"position":2},{"@type":"ListItem","item":{"@id":"https://elpais.com/espana/catalunya","name":"Cataluña","@type":"CollectionPage"},"position":3},{"@type":"ListItem","item":{"@id":"https://elpais.com/espana/catalunya/2021-03-03/las-cuatro-nuevas-calles-del-eixample-no-tendran-asfalto.html?outputType=amp","name":"Las cuatro nuevas calles del Eixample no tendrán asfalto","@type":"ItemPage"},"position":4}]},{"@context":"http://schema.org/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":{"@id":"https://elpais.com","name":"EL PAÍS: el periódico global","@type":"CollectionPage"},"position":1},{"@type":"ListItem","item":{"@id":"https://elpais.com/noticias/cataluna/#?rel=arch","name":"Cataluña","@type":"CollectionPage"},"position":2},{"@type":"ListItem","item":{"@id":"https://elpais.com/espana/catalunya/2021-03-03/las-cuatro-nuevas-calles-del-eixample-no-tendran-asfalto.html?outputType=amp","name":"Las cuatro nuevas calles del Eixample no tendrán asfalto","@type":"ItemPage"},"position":3}]},{"@context":"http://schema.org/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":{"@id":"https://elpais.com","name":"EL PAÍS: el periódico global","@type":"CollectionPage"},"position":1},{"@type":"ListItem","item":{"@id":"https://elpais.com/noticias/barcelona/#?rel=arch","name":"Barcelona","@type":"CollectionPage"},"position":2},{"@type":"ListItem","item":{"@id":"https://elpais.com/espana/catalunya/2021-03-03/las-cuatro-nuevas-calles-del-eixample-no-tendran-asfalto.html?outputType=amp","name":"Las cuatro nuevas calles del Eixample no tendrán asfalto","@type":"ItemPage"},"position":3}]},{"@context":"http://schema.org/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":{"@id":"https://elpais.com","name":"EL PAÍS: el periódico global","@type":"CollectionPage"},"position":1},{"@type":"ListItem","item":{"@id":"https://elpais.com/noticias/distrito-eixample/#?rel=arch","name":"Eixample","@type":"CollectionPage"},"position":2},{"@type":"ListItem","item":{"@id":"https://elpais.com/espana/catalunya/2021-03-03/las-cuatro-nuevas-calles-del-eixample-no-tendran-asfalto.html?outputType=amp","name":"Las cuatro nuevas calles del Eixample no tendrán asfalto","@type":"ItemPage"},"position":3}]},{"@context":"http://schema.org/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":{"@id":"https://elpais.com","name":"EL PAÍS: el periódico global","@type":"CollectionPage"},"position":1},{"@type":"ListItem","item":{"@id":"https://elpais.com/noticias/cerda/#?rel=arch","name":"Cerdà","@type":"CollectionPage"},"position":2},{"@type":"ListItem","item":{"@id":"https://elpais.com/espana/catalunya/2021-03-03/las-cuatro-nuevas-calles-del-eixample-no-tendran-asfalto.html?outputType=amp","name":"Las cuatro nuevas calles del Eixample no tendrán asfalto","@type":"ItemPage"},"position":3}]},{"@context":"http://schema.org/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":{"@id":"https://elpais.com","name":"EL PAÍS: el periódico global","@type":"CollectionPage"},"position":1},{"@type":"ListItem","item":{"@id":"https://elpais.com/noticias/urbanismo/#?rel=arch","name":"Urbanismo","@type":"CollectionPage"},"position":2},{"@type":"ListItem","item":{"@id":"https://elpais.com/espana/catalunya/2021-03-03/las-cuatro-nuevas-calles-del-eixample-no-tendran-asfalto.html?outputType=amp","name":"Las cuatro nuevas calles del Eixample no tendrán asfalto","@type":"ItemPage"},"position":3}]},{"@context":"http://schema.org","@type":"WebSite","name":"EL PAÍS: el periódico global","sameAs":["https://twitter.com/el_pais","https://www.facebook.com/elpais","https://www.youtube.com/user/elpaiscom"],"description":"Noticias de última hora sobre la actualidad en España y el mundo: política, economía, deportes, cultura, sociedad, tecnología, gente, opinión, viajes, moda, televisión, los blogs y las firmas de EL PAÍS. Además especiales, vídeos, fotos, audios, gráficos, entrevistas, promociones y todos los servicios de EL PAÍS.","image":{"@type":"ImageObject","url":"https://imagenes.elpais.com/resizer/NeVaO-fcSTB6i09gtfa-ORhYjK0=/1200x0/cloudfront-eu-central-1.images.arcpublishing.com/prisa/3VW52MBXCBA63P2JW5ZRR4UWX4.jpg","height":1200,"width":850},"url":"https://elpais.com","copyrightHolder":{"@type":"Organization","name":"EL PAÍS: el periódico global","url":"https://elpais.com","logo":{"@type":"ImageObject","url":"https://imagenes.elpais.com/resizer/NeVaO-fcSTB6i09gtfa-ORhYjK0=/1200x0/cloudfront-eu-central-1.images.arcpublishing.com/prisa/3VW52MBXCBA63P2JW5ZRR4UWX4.jpg","height":1200,"width":850},"location":{"@type":"Place","name":"EL PAÍS: el periódico global","hasMap":"https://www.google.com/maps/dir/40.4373704,-3.62446/EL+PAIS,+S.L,+Calle+Miguel+Yuste,+40,+28037+Madrid/@40.4374475,-3.6264062,17z/data=!3m1!4b1!4m9!4m8!1m1!4e1!1m5!1m1!1s0xd422f0ae374e7f9:0x85a924c5a0085092!2m2!1d-3.6242389!2d40.4374558","url":"https://elpais.com","geo":{"@type":"GeoCoordinates","latitude":"40.4374475","longitude":"-3.6264062,17"},"address":{"@type":"PostalAddress","streetAddress":"Miguel Yuste","addressLocality":"40","addressRegion":"Madrid","postalCode":"28037","addressCountry":"ES"}}},"creator":{"@type":"Organization"}}]</script><script type="application/ld+json">{"@context":"http://schema.org","@type":["NewsArticle","ReportageNewsArticle"],"headline":"Las cuatro nuevas calles del Eixample no tendrán asfalto","url":"https://elpais.com/espana/catalunya/2021-03-03/las-cuatro-nuevas-calles-del-eixample-no-tendran-asfalto.html","datePublished":"2021-03-03T11:41:05.819Z","dateModified":"2021-03-03T11:41:05.819Z","description":"El Ayuntamiento de Barcelona presenta los proyectos ganadores para los futuros ejes verdes y plazas del distrito central de la ciudad","articleBody":"Adiós al asfalto y hola a pavimentos más pensados para las personas y la vida vecinal que para los coches. Las cuatro nuevas calles del distrito del Eixample de Barcelona no tendrán asfalto sino pavimentos más sostenibles, agradables y drenantes. Las actuales mutarán en ejes verdes donde mandará el espacio público para los peatones, serán accesibles para todo el mundo, los coches solo circularán si son de vecinos, servicios o mercancías, y habrá mucho más verde. Lo explicó este miércoles el Ayuntamiento, que reveló los proyectos ganadores del concurso para rediseñar cuatro nuevas calles (Consell de Cent, Rocafort, Borrell y Girona) y las cuatro plazas que se crearán en los cruces dentro del proyecto Superilla Barcelona. Este es el plan urbanístico más ambicioso del segundo mandato de la alcaldesa Ada Colau, que presentó los proyectos ganadores en la solemnidad del Saló de Cent, como en las grandes ocasiones. El plan busca exportar la idea de las supermanzanas (agrupaciones de tres por tres calles donde se restringe el tráfico) a la trama cuadriculada que diseñó el ingeniero y urbanista para el Eixample a finales del siglo XIX. La idea de Superilla Barcelona es convertir en un “eje verde” una de cada tres calles del Eixample (tanto verticales como horizontales, un total de 21 calles) y crear 21 plazas en los cruces. Con todo, el compromiso para este mandato es de transformar solo cuatro calles y cuatro plazas, las del concurso. “El objetivo de Superilla Barcelona es que por el distrito del Eixample dejen de pasar cada día 300.000 vehículos”, recordó la teniente de alcalde de Urbanismo, Ecología y Movilidad, Janet Sanz. “El plan consiste en dar el salto de las supermanzanas concretas, como la del Poblenou o Sant Antoni, y exportarlas a escala de ciudad, para reducir la contaminación y el ruido en una ciudad que vive una emergencia climática”. La alcaldesa defendió la “actualización de la trama Cerdà de forma que mantenga su espíritu de espacio público de calidad pero más saludable y reequilibrando la presencia del coche. Para que en la ciudad del futuro el coche reduzca su presencia, porque representa el 20% de los desplazamientos y ocupa el 60% del espacio público”. Cerdà murió en 1876, antes de que comenzaran a pavimentarse calles con asfalto a partir de los años 20 del siglo pasado. Hasta entonces, las calles del Eixample se pavimentaban con adoquines, macadán (una mezcla de piedra picada y apisonada), se alquitranaban, o bien no tenían pavimento. Los cuatro proyectos ganadores de las nuevas calles, tienen en común la ya citada ausencia de asfalto, el protagonismo de pavimentos drenantes, los árboles existentes y nuevo verde, la creación de espacios de encuentro, de estancia y de juego. El ganador del proyecto para la calle de Consell de Cent lleva por título Caminar desde el centro, toda una declaración de intenciones que pone a los vecinos en el lugar donde ahora están los coches. Lo firman los despachos b67 Palomeras y Cierto Estudio, que liderarán la redacción del proyecto de transformación, con la aportación de los otros tres proyectos ganadores: De sòl a sòl (Esteyco-Cáceres, Estudi Marti Franch, Nablabcn Studio), Giraverd (González Cavia y Cabrera, Fabric Office) y Galeries de Vida (GPO Ingeniería y Arquitectura, Agence TER y Ana Coello de Llobet). Para las cuatro plazas que surgirán en los cruces de los ejes verdes, los proyectos ganadores plantean dos patrones: concentran el verde en la zona central y destinan el perímetro para la vida vecinal y cotidiana; o al revés, rodean la plaza de verde para reservar el centro a espacio de encuentro y juego. Los equipos ganadores  son El parlament de les espècies (Estudi 08014, Arquitectura, ciutat, territori); L’illa de les illes (Clara Solà Morales, Albert Casas Álvarez, Frederic Vilagrasa); Jardín Illa (GPO y Land Lab) y Superescocell (Under project Lab, Bopba Arquitectura). En la imagen, Jardin Illa Consell de Cent - Enric Granados), donde el verde se acerca al jardín del Seminario.","keywords":["Cataluña","Barcelona","Eixample","Cerdà","Urbanismo","Planes urbanísticos","Espacio público","Programa Supermanzanas","Janet Sanz"],"author":[{"@type":"Person","name":"Clara Blanchar","sameAs":"https://elpais.com/autor/clara-blanchar/"}],"articleSection":"Cataluña","mainEntityOfPage":"https://elpais.com/espana/catalunya/2021-03-03/las-cuatro-nuevas-calles-del-eixample-no-tendran-asfalto.html","inLanguage":"es","contentLocation":{"@type":"place","name":"Barcelona"},"image":[{"@type":"ImageObject","url":"https://imagenes.elpais.com/resizer/dlt3kNRikikF_38_bNdJefuZw6A=/1960x0/cloudfront-eu-central-1.images.arcpublishing.com/prisa/3VW52MBXCBA63P2JW5ZRR4UWX4.jpg","width":"1960"},{"@type":"ImageObject","url":"https://imagenes.elpais.com/resizer/W7Fb1lSMTP2wCVBswE6mmMfXG30=/980x735/cloudfront-eu-central-1.images.arcpublishing.com/prisa/3VW52MBXCBA63P2JW5ZRR4UWX4.jpg","width":"980"}],"audio":[],"video":[],"publisher":[{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://static.elpais.com/dist/resources/images/logos/amp/default.png","height":60,"width":262},"name":"Ediciones EL PAÍS S.L."}],"publishingPrinciples":"https://elpais.com/estaticos/codigo-etico","alternativeHeadline":"El Ayuntamiento de Barcelona presenta los proyectos ganadores para los futuros ejes verdes y plazas del distrito central de la ciudad","name":"EL PAÍS: el periódico global","isAccessibleForFree":false,"isPartOf":{"@type":["CreativeWork","Product"],"name":"Las cuatro nuevas calles del Eixample no tendrán asfalto","productID":"74UIQPSHUZC2BKPKR25RKRJHFE:Incluido_en_el_muro"},"hasPart":{"@type":"WebPageElement","isAccessibleForFree":"False","cssSelector":"a_b_wall"}}</script><link rel="icon" type="image/x-icon" href="https://static.elpais.com/dist/resources/images/favicon.ico"/><style amp-custom="amp-custom">:root{font-size:62.5%}body,figure,h1,h2,h3,h4,h5,h6,p{margin:0}button{display:inline-block;background-color:inherit;border-color:inherit;border-style:inherit;padding:inherit;font:inherit;color:inherit;text-transform:inherit}button:focus{outline:none}figure{display:inherit;-webkit-margin-before:0;-webkit-margin-after:0;-webkit-margin-start:0;-webkit-margin-end:0}a,a:hover,a:visited{text-decoration:none}blockquote{-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0;margin-inline-end:0}.button{cursor:pointer;text-align:center;border-color:transparent;font-family:BentonSans;padding:1.2rem 1.6rem}.button.slim{padding:1.1rem}.button.broad{padding:1.2rem 3.4rem}.button.shrink_mobile{padding:.9rem}.button_primary{font-size:1rem;line-height:1.3rem;font-weight:900;background-color:#016ca2;border-radius:1px;color:#fff;text-transform:uppercase}.button_primary:active,.button_primary:focus{color:#fff}.button_nav{line-height:2rem;border-radius:3px}.button_nav span{display:none}.button_nav.margin_right_qtr{margin-right:.7rem}.button_nav.margin_right_qtr:before{content:"<";font-size:1.6rem;margin-right:.7rem;margin-top:-.2rem}.button_nav.margin_left_qtr{margin-left:.7rem}.button_nav.margin_left_qtr:after{content:">";font-size:1.6rem;margin-left:.7rem;margin-top:-.2rem}.button_outlined{font-size:1.8rem;line-height:2rem;font-weight:500;background-color:transparent;border:1px solid #016ca2;border-radius:2px;color:#016ca2;text-transform:capitalize}.button_secondary{font-size:1.4rem;line-height:1.7rem;font-weight:300;background-color:#ebebeb;color:#000;text-transform:capitalize;text-align:left;min-width:20rem;border-radius:2.25rem}.button_square{font-size:2rem;line-height:2.5rem;font-weight:700;background-color:#d8d8d8;border-radius:1px;color:#333;height:3.7rem;padding:0 0 .6rem;text-transform:none;width:4.1rem}.button.inverted{background-color:#fff;color:#016ca2}.button_secondary:not(.no_hover):hover{background-color:#fff;font-weight:700;-webkit-box-shadow:2px 2px 5px #d8d8d8;box-shadow:2px 2px 5px #d8d8d8}.button_square:not(etc...)

With that Function node I get this result (I highlighted the parts that shouldn’t be there):

Thank you!

I tested with the function node below, and it works. I attached the workflow that I used for the test.

const regex = /(?<=""articleBody":").*?(?=","")/gmi;

const html = items[0].json.html

var matched = html.match(regex);

return [
  {
    json: {
      html: matched[0]
    }
  }
]
Example Workflow
    {
      "nodes": [
        {
          "parameters": {},
          "name": "Start",
          "type": "n8n-nodes-base.start",
          "typeVersion": 1,
          "position": [
            -3980,
            -120
          ]
        },
        {
          "parameters": {
            "values": {
              "string": [
                {
                  "name": "html",
                  "value": "\"\"articleBody\":\"this is the data\",\"\""
                }
              ]
            },
            "options": {}
          },
          "name": "Set",
          "type": "n8n-nodes-base.set",
          "typeVersion": 1,
          "position": [
            -3700,
            -120
          ]
        },
        {
          "parameters": {
            "functionCode": "const regex = /(?<=\"\"articleBody\":\").*?(?=\",\"\")/gmi;\n\nconst html = items[0].json.html\n\nvar matched = html.match(regex);\n\nreturn [\n  {\n    json: {\n      html: matched[0]\n    }\n  }\n]"
          },
          "name": "Function",
          "type": "n8n-nodes-base.function",
          "typeVersion": 1,
          "position": [
            -3450,
            -120
          ]
        }
      ],
      "connections": {
        "Start": {
          "main": [
            [
              {
                "node": "Set",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Set": {
          "main": [
            [
              {
                "node": "Function",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    }

It gives me ERROR: Cannot read property '0' of null.

Think that my html value is a large full HTML source code of that page. Maybe it’s too large?

You probably have to change const html = items[0].json.html in my example for const html = $node["Get HTML"].json["data"];

Hmm… Same error :S

Can you share your workflow?

Yes, thanks!

Can I see the output of the Get HTML node?

Yes, thanks! Here it is: https://pastebin.com/FczrEbAf

Yes, but how does the node return that data?

Does it come in a particular property? Does it return just the raw string?

Like this:

Hey @ruccc!

Do you still need help?

If you want to extract the information from the HTML, you can use the HTML Extract node.

Thanks. I think HTML Extract node can’t be useful here…