KimberlyBrooke

KimberlyBrooke

Elixir Exercism Acronym

I am working to understand xianrusso’s solution to Exercism’s Acronym solution.

defmodule Acronym do
  def abbreviate(string) do
    Regex.scan(~r/(?<![A-Z])[A-Z]|(?<!\')\b[a-z]/, string)
    |> List.flatten
    |> Enum.map(&String.upcase/1)
    |> Enum.join
  end
end

The portion that I am working to digest is the Regex.

I believe this link contains the answer I just want to confirm that what I am thinking is happening is indeed what is happening. Advanced Regex Tutorial—Regex Syntax

I believe that in this ~r/(?<![A-Z])[A-Z]/ - that the (?<![A-Z]) is saying that as long as where we are at in the string does not have a capital letter that immediately precedes it then we can continue to keep matching it to [A-Z].

I believe that in this ~r/(?<!')\b[a-z]/ it is saying that as long as where we are at in the string there is not a ' that precedes it then we can keep matching it to \b[a-z]

Showing Posts 1 to 4

eksperimental

eksperimental

quiet, but note that \b is s zero-width (same as lookbehinds) assertion, which is a word boundary. A limit between \w (a word) and a non-word (\W), or the beginning or end of a word.
So the second part of the regex is telling you [a-z] preceeded by any non-word that is not a single quote, and it can match a [a-z] at the beginning of the string.

eksperimental

eksperimental

The regex commented out in plain English:

regex =  ~r/
  (?<![A-Z])[A-Z]  # Match ONE uppercase letter from A to Z,
                   # that is not preceded by another uppercase letter from A to Z.

  |                # OR

  (?<!\')        # no need to escape the single quote  
  \b
  [a-z]          # Match ONE lowercase letter from a to z,
                   # that is preceded by a word boundary (\b)
                   # and that is not preceded by a single quote.
                   # Note: the beginning of a string is considered a word boundary.
  /x               # "x" modifier to to allow comments

Note the regex is valid, feel free to use it in your code, if you want.

KimberlyBrooke

KimberlyBrooke OP

Thank you!

eksperimental

eksperimental

No worries

— All posts loaded —

Where Next? Top

Trending in Challenges Top

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews