Regex Question.

NodeBB Development
  • @Ted sits idly by and stalks the topic, knowing that with a little more time, this will be resolved. 😉

  • @a_5mith Your regex seems fine to me. You can use tools like to debug them more easily.
    I've just tested the href parameter why are you testing everything and not only the actual link ?

  • @esiao The regex works, but if you use a parameter, the ID becomes the {ID}&the parameter, which breaks embedding.

    I forked the youtube plugin that psychobunny made, so I've not really changed much of it.

    EDIT: Using that site, I've managed to get what looks right, I'll give it a go and let you know how it goes. 😄

    EDIT again, as you can see from the end of the ID is now being included under $2 if there's no parameters, which also breaks it. 😆 Is there a way of parsing null if there's no parameters? I'm so close. I think.

  • @a_5mith

    With /<a href="(?:https?:\/\/)?(?:www\.)?(?:youtu\.be)\/((?:[\w\-_]+){11})\??([^&]+)?(&?[\w&]+)*">.+<\/a>/g
    On <a href="">something</a>
    It creates three groups
    1: id
    2: time
    3: parameter

    Is that what you wanted ? If the time is not used you can make a non capturing group on ([^&]+)

  • That wouldn't work on <a href="">something</a> due to the = sign.

    I'm ok with not using the parameters bit, but time would be good to have. As long as I can get the ID without anything else leaking into it, I'm not 100% concerned about parameters etc.

  • @a_5mith Just adding (&?[\w&=]+) instead of (&?[\w&]+) should do the trick.

  • Hey @esiao , thanks for the code, there's a slight issue though, that appears to be regex based, it's only firing each code, once, if I embed the same URL, it will only embed 1, not the other, however if I change the video embed to be one of the other URL variations, replacing watch?v= with /embed/ for example, then it embeds fine, as I can't read regex, is there something in this that is stopping it from firing again afterwards. 😕

  • @a_5mith Yes you're right, here's the fix

    /(?:<a href="(?:https?:\/\/)?(?:www\.)?(?:youtu\.be)\/((?:[\w\-_]+){11})\??([^&]+)?(&?[\w&=]+)*">[^<a]+<\/a>)+/gm

    But if the links are like <a href="">link</a><a href="">link</a> it will not work.

  • @esiao said:

    Unfortunately, that doesn't seem to work either, even if I put the works of shakespere between the two youtube URLs, it still only displays one.

    Also it doesn't seem to match watch?v=videoID either. But it's probably a slightly different regex.

  • I'd like to help you out, but I'd need more specific inputs you'd like to read the ID and the parameters from.

    Currently I can just tell you that sth. like [\w\-_] is no clean regex since it's equivalent to [\w-] and the shorter the better the overview 😄
    Also the [^<a]+ out of the last full regex of @esiao would stop at the first a occurrence, not only at the first <a occurrence as it may suggest.
    So there are a few not-so-well parts within each regex I've seen yet and you didn't consider users who put the v=... parameter after other parameters within the regularUrls. And are you sure that it'll always be like <a href="...">...</a> and in no case the a-tag could get another attribute (My emoji-extended broke at some version because the code-tags got ^^)...

    If you want me to help you out with more clean regex (up to my knowledge) I'd likely help you if I get a few example URLs that cover all cases.
    Also if you'd be willing to learn regex syntax I'd try to explain my results afterwards 😉

    But for now I have to sleep first, good night zzz

Suggested Topics