Question: I am trying to do a basic string replace using a regex expression, but the answers I have found do not seem to help - they are directly answering each persons unique requirement with little or no explanation.

I am using `str = str.replace(/[^a-z0-9+]/g, '');` at the moment. But what I would like to do is allow all alphanumeric characters (a-z and 0-9) and also the '-' character.

Could you please answer this and explain how you concatenate expressions.

Answer: 
Just change `+` to `-`:

```
str = str.replace(/[^a-z0-9-]/g, "");

```

You can read it as:

1. `[^ ]`: match NOT from the set
2. `[^a-z0-9-]`: match if not `a-z`, `0-9` or `-`
3. `/ /g`: do global match

**More information:**

* <https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions>
Your character class (the part in the square brackets) is saying that you want to match anything except 0-9 and a-z and +. You aren't explicit about how many a-z or 0-9 you want to match, but I assume the + means you want to replace strings of at least one alphanumeric character. It should read instead:

```
str = str.replace(/[^-a-z0-9]+/g, "");

```

Also, if you need to match upper-case letters along with lower case, you should use:

```
str = str.replace(/[^-a-zA-Z0-9]+/g, "");

```