@tensorflow/tfjs-layers
Version:
TensorFlow layers API in JavaScript
42 lines • 5.44 kB
JavaScript
/**
* @license
* Copyright 2023 Google LLC.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* =============================================================================
*/
// TODO(mattSoulanille): Replace this with automatic polyfilling using core-js.
export function* matchAll(str, regexp) {
// Remove the global flag since str.match does not work with it.
const flags = regexp.flags.replace(/g/g, '');
regexp = new RegExp(regexp, flags);
let match = str.match(regexp);
let offset = 0;
let restOfStr = str;
while (match != null) {
if (match.index == null) {
console.error(match);
throw new Error(`Matched string '${match[0]}' has no index`);
}
// Remove up to and including the first match from the input string
// so the next loop can find the next match.
const matchEnd = match.index + match[0].length;
restOfStr = restOfStr.slice(matchEnd);
// Adjust the match to look like a result from matchAll.
match.index += offset;
match.input = str;
offset += matchEnd;
yield match;
match = restOfStr.match(regexp);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2hfYWxsX3BvbHlmaWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1sYXllcnMvc3JjL2xheWVycy9ubHAvbWF0Y2hfYWxsX3BvbHlmaWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILCtFQUErRTtBQUMvRSxNQUFNLFNBQVUsQ0FBQyxDQUFBLFFBQVEsQ0FBQyxHQUFXLEVBQUUsTUFBYztJQUNuRCxnRUFBZ0U7SUFDaEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFbkMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUM7SUFDcEIsT0FBTyxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ3BCLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDOUQ7UUFFRCxtRUFBbUU7UUFDbkUsNENBQTRDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMvQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0Qyx3REFBd0Q7UUFDeEQsS0FBSyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7UUFDdEIsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFFbEIsTUFBTSxJQUFJLFFBQVEsQ0FBQztRQUNuQixNQUFNLEtBQUssQ0FBQztRQUNaLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2pDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gVE9ETyhtYXR0U291bGFuaWxsZSk6IFJlcGxhY2UgdGhpcyB3aXRoIGF1dG9tYXRpYyBwb2x5ZmlsbGluZyB1c2luZyBjb3JlLWpzLlxuZXhwb3J0IGZ1bmN0aW9uICptYXRjaEFsbChzdHI6IHN0cmluZywgcmVnZXhwOiBSZWdFeHApOiBJdGVyYWJsZUl0ZXJhdG9yPFJlZ0V4cE1hdGNoQXJyYXk+IHtcbiAgLy8gUmVtb3ZlIHRoZSBnbG9iYWwgZmxhZyBzaW5jZSBzdHIubWF0Y2ggZG9lcyBub3Qgd29yayB3aXRoIGl0LlxuICBjb25zdCBmbGFncyA9IHJlZ2V4cC5mbGFncy5yZXBsYWNlKC9nL2csICcnKTtcbiAgcmVnZXhwID0gbmV3IFJlZ0V4cChyZWdleHAsIGZsYWdzKTtcblxuICBsZXQgbWF0Y2ggPSBzdHIubWF0Y2gocmVnZXhwKTtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGxldCByZXN0T2ZTdHIgPSBzdHI7XG4gIHdoaWxlIChtYXRjaCAhPSBudWxsKSB7XG4gICAgaWYgKG1hdGNoLmluZGV4ID09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWF0Y2gpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYXRjaGVkIHN0cmluZyAnJHttYXRjaFswXX0nIGhhcyBubyBpbmRleGApO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBmaXJzdCBtYXRjaCBmcm9tIHRoZSBpbnB1dCBzdHJpbmdcbiAgICAvLyBzbyB0aGUgbmV4dCBsb29wIGNhbiBmaW5kIHRoZSBuZXh0IG1hdGNoLlxuICAgIGNvbnN0IG1hdGNoRW5kID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgcmVzdE9mU3RyID0gcmVzdE9mU3RyLnNsaWNlKG1hdGNoRW5kKTtcblxuICAgIC8vIEFkanVzdCB0aGUgbWF0Y2ggdG8gbG9vayBsaWtlIGEgcmVzdWx0IGZyb20gbWF0Y2hBbGwuXG4gICAgbWF0Y2guaW5kZXggKz0gb2Zmc2V0O1xuICAgIG1hdGNoLmlucHV0ID0gc3RyO1xuXG4gICAgb2Zmc2V0ICs9IG1hdGNoRW5kO1xuICAgIHlpZWxkIG1hdGNoO1xuICAgIG1hdGNoID0gcmVzdE9mU3RyLm1hdGNoKHJlZ2V4cCk7XG4gIH1cbn1cbiJdfQ==