diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-03-07 15:23:32 -0500 |
---|---|---|
committer | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-03-07 21:47:48 -0500 |
commit | 8f9b6534c64dd871db92729714b46d400a52e30e (patch) | |
tree | b07759046d5f90f72878d4b0725383c76994889b /ext/bg/js | |
parent | 7ac1c843a92cbefd0a625f06b5093217b585f7cf (diff) |
Move stringReplaceAsync
It is only used in AnkiNoteBuilder and it was originally created
for this purpose.
Diffstat (limited to 'ext/bg/js')
-rw-r--r-- | ext/bg/js/anki-note-builder.js | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/ext/bg/js/anki-note-builder.js b/ext/bg/js/anki-note-builder.js index be39ff43..2a15b20d 100644 --- a/ext/bg/js/anki-note-builder.js +++ b/ext/bg/js/anki-note-builder.js @@ -93,7 +93,7 @@ class AnkiNoteBuilder { }; const markers = this._markers; const pattern = /\{([\w-]+)\}/g; - return await stringReplaceAsync(field, pattern, async (g0, marker) => { + return await AnkiNoteBuilder.stringReplaceAsync(field, pattern, async (g0, marker) => { if (!markers.has(marker)) { return g0; } @@ -106,4 +106,19 @@ class AnkiNoteBuilder { } }); } + + static stringReplaceAsync(str, regex, replacer) { + let match; + let index = 0; + const parts = []; + while ((match = regex.exec(str)) !== null) { + parts.push(str.substring(index, match.index), replacer(...match, match.index, str)); + index = regex.lastIndex; + } + if (parts.length === 0) { + return Promise.resolve(str); + } + parts.push(str.substring(index)); + return Promise.all(parts).then((v) => v.join('')); + } } |