# Regex

Built-in library for regular expressions

#### Example usage

```lua
local Regex = require("@lune/regex")

local re = Regex.new("hello")

if re:isMatch("hello, world!") then
	print("Matched!")
end

local caps = re:captures("hello, world! hello, again!")

print(#caps) -- 2
print(caps:get(1)) -- "hello"
print(caps:get(2)) -- "hello"
print(caps:get(3)) -- nil
```

## Constructors

### new

Creates a new `Regex` from a given string pattern.

#### Errors

This constructor throws an error if the given pattern is invalid.

#### Parameters

-   `pattern` `string` The string pattern to use

#### Returns

-   `Regex` The new Regex object

---

## Methods

### isMatch

Check if the given text matches the regular expression.

This method may be slightly more efficient than calling `find` if you only need to know if the text
matches the pattern.

#### Parameters

-   `self` Regex

-   `text` `string` The text to search

#### Returns

-   `boolean` Whether the text matches the pattern

---

### find

Finds the first match in the given text.

Returns `nil` if no match was found.

#### Parameters

-   `self` Regex

-   `text` `string` The text to search

#### Returns

-   `RegexMatch?` The match object

---

### captures

Finds all matches in the given text as a `RegexCaptures` object.

Returns `nil` if no matches are found.

#### Parameters

-   `self` Regex

-   `text` `string` The text to search

#### Returns

-   `RegexCaptures?` The captures object

---

### split

Splits the given text using the regular expression.

#### Parameters

-   `self` Regex

-   `text` `string` The text to split

#### Returns

-   `{ string }` The split text

---

### replace

Replaces the first match in the given text with the given replacer string.

#### Parameters

-   `self` Regex

-   `haystack` `string` The text to search

-   `replacer` `string` The string to replace matches with

#### Returns

-   `string` The text with the first match replaced

---

### replaceAll

Replaces all matches in the given text with the given replacer string.

#### Parameters

-   `self` Regex

-   `haystack` `string` The text to search

-   `replacer` `string` The string to replace matches with

#### Returns

-   `string` The text with all matches replaced

---

# RegexCaptures

Captures from a regular expression.

## Methods

### get

Returns the match at the given index, if one exists.

#### Parameters

-   `self` RegexCaptures

-   `index` `number` The index of the match to get

#### Returns

-   `RegexMatch` The match, if one exists

---

### group

Returns the match for the given named match group, if one exists.

#### Parameters

-   `self` RegexCaptures

-   `group` `string` The name of the group to get

#### Returns

-   `RegexMatch` The match, if one exists

---

### format

Formats the captures using the given format string.

#### Example usage

```lua
local regex = require("@lune/regex")

local re = regex.new("(?<day>[0-9]{2})-(?<month>[0-9]{2})-(?<year>[0-9]{4})")

local caps = re:captures("On 14-03-2010, I became a Tenneessee lamb.");
assert(caps ~= nil, "Example pattern should match example text")

local formatted = caps:format("year=$year, month=$month, day=$day")
print(formatted) -- "year=2010, month=03, day=14"
```

#### Parameters

-   `self` RegexCaptures

-   `format` `string` The format string to use

#### Returns

-   `string` The formatted string

---

# RegexMatch

A match from a regular expression.

Contains the following values:

-   `start` -- The start index of the match in the original string.
-   `finish` -- The end index of the match in the original string.
-   `text` -- The text that was matched.
-   `len` -- The length of the text that was matched.