# modern-ahocorasick

> modern-ahocorasick

Latest version **2.0.4** (published 2025-02-08) · MIT license · 0 weekly downloads

## Install

```sh
npm install modern-ahocorasick
pnpm add modern-ahocorasick
yarn add modern-ahocorasick
bun add modern-ahocorasick
```

## Health

**Score 40/100 (D)** — status: maintenance-mode.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.4 |
| Published | 2025-02-08 |
| First published | 2023-08-11 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 13.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 19 |
| Author | SonOfMagic |
| Maintainers | icebreaker |
| Keywords | ahocorasick, modern, cjs, js |

## Links

- npm: https://www.npmjs.com/package/modern-ahocorasick
- Repository: https://github.com/sonofmagic/modern-ahocorasick
- Homepage: https://github.com/sonofmagic/modern-ahocorasick#readme
- Issues: https://github.com/sonofmagic/modern-ahocorasick/issues
- npm.io page: https://npm.io/package/modern-ahocorasick

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 2.0.4 (latest) — 2025-02-08
- 1.1.0 (next) — 2024-11-25
- 2.0.0-alpha.1 (alpha) — 2024-05-18
- 2.0.3 — 2025-02-07
- 2.0.2 — 2024-11-25
- 2.0.1 — 2024-11-25
- 2.0.0 — 2024-11-25
- 1.0.2-alpha.1 — 2024-05-16
- 1.0.1 — 2023-11-12
- 1.0.0 — 2023-08-11

## README

# modern-ahocorasick

> Forked from `https://github.com/BrunoRB/ahocorasick` and make it modern! Thanks to the author(`BrunoRB`) of `ahocorasick`

Implementation of the Aho-Corasick string searching algorithm, as described in the paper "Efficient string matching: an aid to bibliographic search".

this pkg has `cjs` and `esm` format, and have `.d.ts` file.

## Install

```sh
npm i modern-ahocorasick
yarn add modern-ahocorasick
pnpm i modern-ahocorasick
```

## Usage

```ts
// esm
import AhoCorasick from 'modern-ahocorasick'
// cjs
const AhoCorasick = require('modern-ahocorasick')

const ac = new AhoCorasick(['keyword1', 'keyword2', 'etc'])
const results = ac.search('should find keyword1 at position 19 and keyword2 at position 47.')

// [ [ 19, [ 'keyword1' ] ], [ 47, [ 'keyword2' ] ] ]
```

## Visualization

See <https://brunorb.github.io/ahocorasick/visualization.html> for an interactive visualization of the algorithm.

## API

### Constructor

#### `constructor(keywords: string[])`

Initializes the Aho-Corasick state machine with the provided `keywords`.

**Parameters**:

- `keywords`: An array of strings representing the keywords to search for.

**Example**:

```typescript
const keywords = ['he', 'she', 'his', 'hers']
const ac = new AhoCorasick(keywords)
```

---

### Methods

#### `search(str: string): [number, string[]][]`

Searches the input string `str` for occurrences of any of the keywords and returns a list of matches.

**Parameters**:

- `str`: The input string to search.

**Returns**:

- An array of tuples. Each tuple contains:
  - The ending index of the match in the input string.
  - An array of matched keywords at that position.

**Example**:

```typescript
const ac = new AhoCorasick(['keyword1', 'keyword2', 'etc'])
const results = ac.search('should find keyword1 at position 19 and keyword2 at position 47.')

// [ [ 19, [ 'keyword1' ] ], [ 47, [ 'keyword2' ] ] ]
```

---

#### `match(str: string): boolean`

Checks if any keyword exists in the input string `str`.

**Parameters**:

- `str`: The input string to search.

**Returns**:

- `true` if any keyword is found.
- `false` otherwise.

**Example**:

```typescript
const ac = new AhoCorasick(['he', 'she', 'his', 'hers'])
console.log(ac.match('ushers')) // Output: true
console.log(ac.match('xyz')) // Output: false
```

---

### Internal Functionality

While the `_buildTables` method is not part of the public API, it is responsible for building the transition (`gotoFn`), output, and failure functions used by the Aho-Corasick algorithm.

---

## Examples

### Example 1: Basic Search

```typescript
const keywords = ['cat', 'bat', 'rat']
const ac = new AhoCorasick(keywords)

const text = 'the cat chased the rat while a bat flew by'
const matches = ac.search(text)
```

### Example 2: Check Match Presence

```typescript
const ac = new AhoCorasick(['abc', '123'])

console.log(ac.match('hello abc world')) // Output: true
console.log(ac.match('hello world')) // Output: false
```

---

### Example: Case-Insensitive Search

```typescript
const keywords = ['hello', 'world']
const ac = new AhoCorasick(keywords.map(k => k.toLowerCase()))

const text = 'Hello World'
const matches = ac.search(text.toLowerCase())
console.log(matches)
// Output: [
//   [4, ["hello"]],
//   [10, ["world"]]
// ]
```

This document serves as a complete guide for using the `AhoCorasick` class for multi-pattern string matching.

## License

[The MIT License](LICENSE)

---
_Source: https://npm.io/package/modern-ahocorasick · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
