locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
33 lines (32 loc) • 1.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sub = sub;
function sub(s, i, j) {
// discuss at: https://locutus.io/lua/sub/
// parity verified: Lua 5.4
// original by: Kevin van Zonneveld (https://kvz.io)
// note 1: Lua uses 1-based indexing, negative indices count from end
// example 1: sub('Hello', 1, 3)
// returns 1: 'Hel'
// example 2: sub('Hello', 2)
// returns 2: 'ello'
// example 3: sub('Hello', -2)
// returns 3: 'lo'
s = String(s);
const len = s.length;
// Convert Lua 1-based index to JS 0-based
// Negative indices count from end in Lua
let start = i < 0 ? len + i : i - 1;
let end = j === undefined ? len : j < 0 ? len + j + 1 : j;
// Clamp to valid range
if (start < 0) {
start = 0;
}
if (end > len) {
end = len;
}
if (start >= end) {
return '';
}
return s.substring(start, end);
}