WikiChree.COM 新規   編集   添付   管理  



トップ   編集 編集〔GUI〕 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン

Pkript/API/String の変更点

#author("2026-08-31T22:10:27+09:00","default:guide","guide")
* Pkript/API/String [#kd1fb881]
#author("2026-09-04T00:05:54+09:00","default:mcp","bot-mcp")
* Pkript/API/String [#sb24de42]

文字列型のメソッドリファレンス。UTF-8マルチバイト対応。長さ・インデックスはすべて文字数単位(バイト数ではない)。
UTF-8マルチバイト対応。長さとインデックスはすべて文字数(コードポイント数)単位。

** リファレンス [#qe068bdd]
** リファレンス [#u297caed]

*** プロパティ [#j77e3022]
*** プロパティ [#qc70f03e]

- length: Number: 文字数(コードポイント数)
- str.length: Number: 文字数(コードポイント数)

*** 検索 [#j1cf78e4]
*** 検索 [#r4c37887]

|~メソッド|~戻り値|~説明|h
|str.indexOf(sub, [from])|Number(見つからない場合 -1)|最初の一致位置|
|str.lastIndexOf(sub)|Number|後方から最初の一致位置|
|str.includes(sub)|Boolean|部分一致するか|
|str.startsWith(sub)|Boolean|前方一致するか|
|str.endsWith(sub)|Boolean|後方一致するか|
|str.search(re)|Number(見つからない場合 -1)|正規表現に最初に一致した位置|
|str.localeCompare(other)|Number(-1 / 0 / 1)|バイト順での比較。sort のコールバックに使える|

*** 変換 [#g81c340a]
*** 変換 [#n909b361]

|~メソッド|~戻り値|~説明|h
|str.toUpperCase()|String|大文字化|
|str.toLowerCase()|String|小文字化|
|str.trim()|String|前後の空白を除去|
|str.trimStart()|String|先頭の空白を除去|
|str.trimEnd()|String|末尾の空白を除去|
|str.replace(from, to)|String|最初の一致を置換|
|str.replaceAll(from, to)|String|すべての一致を置換|
|str.split(sep)|Array<String>|分割して配列化|
|str.split(sep)|Array&lt;String&gt;|分割して配列化|
|str.repeat(count)|String|指定回数繰り返した文字列|
|str.concat(...vals)|String|引数を文字列化して末尾に連結|
|str.charCodeAt(index)|Number(範囲外は NaN)|指定位置のコードポイント|
|str.codePointAt(index)|Number(範囲外は NaN)|charCodeAt と同じ|
|str.toString() / str.valueOf()|String|文字列そのもの|

*** 部分文字列 [#x1da9273]
- 文字列はUTF-8で扱うため、charCodeAt もサロゲートペアではなくコードポイントを返す

*** 部分文字列 [#ea83dd7f]

|~メソッド|~戻り値|~説明|h
|str.substring(start, [end])|String|start から end の直前まで(負インデックス非対応)|
|str.slice(start, [end])|String|start から end の直前まで(負インデックス対応)|
|str.charAt(index)|String|指定位置の1文字。範囲外は空文字列|
|str.at(index)|String|指定位置の1文字。-1 は最後の文字|
|str.at(index)|String|指定位置の1文字。-1 は最後の文字。範囲外は空文字列|

*** パディング [#kb618a24]
*** パディング [#k2736f87]

#pkript(highlight){{
#highlight{{
str.padStart(len, [pad])
str.padEnd(len, [pad])
}}

|~引数|~型|~説明|h
|len|Number|目標の文字数|
|pad|String|埋める文字列(省略時は半角空白)|

戻り値: String

すでに len 以上の場合はそのまま返す。PKRIPT_MAX_STRING を超える要求はエラー。
すでに len 以上の場合はそのまま返す。PKRIPT_MAX_STRING を超える要求はメモリ確保前にエラーになる。

*** 正規表現 [#bd206b8a]
*** 正規表現 [#v4574107]

|~メソッド|~戻り値|~説明|h
|str.match(re)|Array / null|最初の一致の配列(g フラグ付きは全件)|
|str.matchAll(re)|Array|全件一致の配列(g フラグ必須)|
|str.replace(re, to)|String|最初の一致を置換(g フラグ付きは全件)|
|str.replaceAll(re, to)|String|全件置換|
|str.split(re)|Array<String>|正規表現で分割|
|str.split(re)|Array&lt;String&gt;|正規表現で分割|

*** spanWhile / spanUntil [#f6f76c12]
*** spanWhile / spanUntil [#wd463d42]

#pkript(highlight){{
#highlight{{
str.spanWhile(from, set)
str.spanUntil(from, set)
}}

|~引数|~型|~説明|h
|from|Number|走査を開始するインデックス|
|set|String|文字クラス(a-z のような範囲記法可。- 自体は先頭か末尾に置く)|

戻り値: Number: 停止した位置のインデックス

spanWhile: set に含まれる文字が続く間進む。
spanUntil: set に含まれない文字が続く間進む。

範囲として解釈されるのは昇順のときのみ(z-a は 'z', '-', 'a' の3文字の集合)。
- 範囲として解釈されるのは昇順のときのみ(z-a は 'z', '-', 'a' の3文字の集合)
- 戻り値は停止位置なので、そのまま substring() に渡せる
- マルチバイトでも charAt / substring と同じ文字数単位で動作する


** 使用法 [#ve007d11]
** 使用法 [#i7a4d77a]

*** 文字列を整形してHTMLに出力する [#q639f29d]
*** 文字列を整形してHTMLに出力する [#string_usage_trim]

#pkript(highlight){{
#highlight{{
return "<p>" + htmlsc(e.args[0].trim().toUpperCase()) + "</p>";
}}

*** 連番を0埋めする [#x67ccb1c]
*** 連番を0埋めする [#string_usage_pad]

#pkript(highlight){{
#highlight{{
const nums = [1, 5, 12, 100];
return nums.map((n) => String(n).padStart(3, "0")).join(", ");
// "001, 005, 012, 100"
}}

*** 正規表現で日付を変換する [#s865f5ba]
*** 文字ごとに走査してハイライトする [#string_usage_span]

#pkript(highlight){{
return text.replace(/(\d{4})-(\d{2})-(\d{2})/g, "$1年$2月$3日");
}}

*** 文字ごとに走査してハイライトする [#hb1bd854]

#pkript(highlight){{
#highlight{{
const IDENT = "a-zA-Z0-9_$";
let i = 0;
let out = "";
while (i < code.length) {
    const end = code.spanWhile(i, IDENT);
    if (end > i) {
        out += "<b>" + htmlsc(code.substring(i, end)) + "</b>";
        i = end;
        continue;
    }
    out += htmlsc(code.charAt(i));
    i++;
}
return "<pre>" + out + "</pre>";
}}


** See also [#e346b636]

- [[Pkript/リファレンス/API/RegExp]]