# Question 50

### Question

Can you explain how to create a regular expression that matches a valid IP address?

### Answer

Here's a breakdown of creating a regular expression (regex) for validating IP addresses in JavaScript, along with explanations and considerations:

**Regular Expression:**

```javascript
const ipRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
```

**Explanation:**

* **`^` and `$`:** Match the beginning and end of the string, ensuring the entire input is an IP address.
* **`(?:...)`:** Non-capturing groups – used to group parts of the regex without creating separate capture groups. This keeps things clean and readable.
* **`(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.`:** Matches a single byte of an IP address (0-255):
  * `25[0-5]`: Matches 250 to 255.
  * `2[0-4][0-9]`: Matches 200 to 249.
  * `[01]?[0-9][0-9]?`: Matches 0 to 199, allowing for optional leading "0" or "1".
  * `\.`: Matches a literal period (.), separating the bytes.
* **`{3}`:** Repeats the preceding group (a byte and period) three times, ensuring there are four bytes in total.
* **`(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$`:** Matches the final byte of the IP address, using the same pattern as before.

**Usage Example:**

```javascript
const ipAddress = "192.168.1.1";

if (ipRegex.test(ipAddress)) {
  console.log("Valid IP address");
} else {
  console.log("Invalid IP address");
}
```

**Important Notes:**

* This regex only validates the format of an IP address. It doesn't check if the address is actually reachable or assigned to a device.
* For more complex validation needs (e.g., IPv6, network ranges), you might need a more sophisticated regex or consider using a dedicated library.
