> ## Documentation Index
> Fetch the complete documentation index at: https://docs.launchblitz.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# String

> Text utility nodes for Scrapist graphs.

Common string transformations, matching, and extraction.

### `string.transformCapitalization` — Transform Capitalization

**Inputs**

| Port    | Kind | Type     | Structure |
| ------- | ---- | -------- | --------- |
| `value` | data | `string` | scalar    |

**Outputs**

| Port     | Kind | Type     | Structure |
| -------- | ---- | -------- | --------- |
| `result` | data | `string` | scalar    |

Config:

* `mode` (string): `upper` (default), `lower`, `title`, `abbreviation`

### `string.contains` — String Contains

**Inputs**

| Port       | Kind | Type     | Structure |
| ---------- | ---- | -------- | --------- |
| `haystack` | data | `string` | scalar    |
| `needle`   | data | `string` | scalar    |

**Outputs**

| Port       | Kind | Type      | Structure |
| ---------- | ---- | --------- | --------- |
| `contains` | data | `boolean` | scalar    |

Config:

* `caseSensitive` (bool, default false)
* `wholeWord` (bool, default false) — splits on whitespace and compares whole tokens

### `string.length` — String Length

Counts Unicode scalar characters (not bytes).

**Inputs**: `value` (data, string)\
**Outputs**: `length` (data, integer)

### `string.wordCount` — Word Count

**Inputs**: `value` (data, string)\
**Outputs**: `count` (data, integer)

Config:

* `separator` (string, optional)
  * If provided and empty, counts characters.
  * If provided and non-empty, counts non-empty segments after splitting.
  * If omitted, uses a CJK-aware “word” heuristic.

### `string.slice` — String Slice

**Inputs**

| Port    | Kind | Type      | Structure | Notes                            |
| ------- | ---- | --------- | --------- | -------------------------------- |
| `value` | data | `string`  | scalar    |                                  |
| `start` | data | `integer` | scalar    | Start index (char index)         |
| `end`   | data | `integer` | scalar    | Optional; end index (char index) |

**Outputs**

| Port     | Kind | Type     | Structure |
| -------- | ---- | -------- | --------- |
| `result` | data | `string` | scalar    |

### `string.replace` — String Replace

**Inputs**

| Port      | Kind | Type     | Structure |
| --------- | ---- | -------- | --------- |
| `value`   | data | `string` | scalar    |
| `search`  | data | `string` | scalar    |
| `replace` | data | `string` | scalar    |

**Outputs**

| Port     | Kind | Type     | Structure |
| -------- | ---- | -------- | --------- |
| `result` | data | `string` | scalar    |

Config:

* `useRegex` (bool, default false)
* `caseSensitive` (bool, default true)
* `global` (bool, default true)

Notes:

* If regex compilation fails, the node returns the original string.

### `string.trim` — Trim

**Inputs**: `value` (data, string)\
**Outputs**: `result` (data, string)

### `string.split` — Split

**Inputs**

| Port        | Kind | Type     | Structure |
| ----------- | ---- | -------- | --------- |
| `value`     | data | `string` | scalar    |
| `separator` | data | `string` | scalar    |

**Outputs**

| Port     | Kind | Type     | Structure |
| -------- | ---- | -------- | --------- |
| `result` | data | `string` | array     |

### `string.join` — Join

**Inputs**

| Port        | Kind | Type     | Structure |
| ----------- | ---- | -------- | --------- |
| `values`    | data | `string` | array     |
| `separator` | data | `string` | scalar    |

**Outputs**: `result` (data, string)

Notes:

* Non-string values in `values` are skipped (they do not error).

### `string.concat` — Concatenate

**Inputs**: `a` (string), `b` (string)\
**Outputs**: `result` (string)

### `string.matchesRegex` — Matches Regex

**Inputs**: `value` (data, string)\
**Outputs**: `matches` (data, boolean)

Config:

* `pattern` (string)
* `flags` (string, optional): supports `i`, `m`, `s`, `U`, `x`, `u`

Notes:

* If regex compilation fails, `matches` is `false`.

### `string.extractRegex` — Extract Regex

**Inputs**: `value` (data, string)\
**Outputs**

| Port      | Kind | Type      | Structure |
| --------- | ---- | --------- | --------- |
| `matches` | data | `string`  | array     |
| `matched` | data | `boolean` | scalar    |

Config: same as `string.matchesRegex` (`pattern`, `flags`)

### `string.detectChinese` — Detect Chinese

**Inputs**: `text` (data, string)\
**Outputs**

| Port         | Kind | Type      | Structure |
| ------------ | ---- | --------- | --------- |
| `is_chinese` | data | `boolean` | scalar    |
| `is_mixed`   | data | `boolean` | scalar    |

Notes:

* `is_mixed` only considers alphanumeric non-CJK characters (punctuation is ignored).

### `string.translateToChinese` — Translate to Chinese

Exec node that translates text to Simplified Chinese.

**Inputs**

| Port      | Kind | Type     | Structure |
| --------- | ---- | -------- | --------- |
| `exec-in` | exec | —        | —         |
| `text`    | data | `string` | scalar    |

**Outputs**

| Port          | Kind | Type     | Structure |
| ------------- | ---- | -------- | --------- |
| `exec-out`    | exec | —        | —         |
| `translation` | data | `string` | scalar    |

Notes:

* Requires a translator service in the backend runtime; if missing, the node errors.
