メニュー
検索
言語
タグ
文字列をスネークケースの文字列に変換する関数 (toSnakeCase)
総合評価: - 作成日: 2025-10-07
コメント:
Braveブラウザで動作確認済み
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>toSnakeCase</title>
<script>
/**
* 文字列sをスネークケースに変換する。
*/
function toSnakeCase (s) {
let dst = ''
let m = 0
for (let i = 0; i < s.length; i++) {
let c = s[i]
switch (m) {
case 0:
if (/[a-zA-Z0-9]/.test(c)) {
dst += c.toLowerCase()
m = 10
}
break
case 10:
if (/[a-z0-9]/.test(c)) {
dst += c.toLowerCase()
} else if (/[A-Z]/.test(c)) {
dst += '_'
dst += c.toLowerCase()
} else if (c === '_') {
dst += c
m = 30
} else {
m = 20
}
break
case 20:
if (/[a-zA-Z0-9]/.test(c)) {
dst += '_'
dst += c.toLowerCase()
m = 10
} else {
// pass
}
break
case 30:
if (c === '_') {
// pass
} else if (/[a-zA-Z0-9]/.test(c)) {
i--
m = 10
} else {
m = 20
}
break
}
}
return dst
}
document.addEventListener('DOMContentLoaded', () => {
console.assert(toSnakeCase(' snake case string? ') === 'snake_case_string')
console.assert(toSnakeCase('camelCaseString123') === 'camel_case_string123')
console.assert(toSnakeCase('snake_case_123string') === 'snake_case_123string')
console.assert(toSnakeCase('Pascal123CaseString') === 'pascal123_case_string')
console.assert(toSnakeCase('123kebab-case-string') === '123kebab_case_string')
console.log('OK')
})
</script>
</head>
<body>
</body>
</html>