javascriptshim

How to use the string.prototype.matchall polyfill?


I want String.prototype.matchAll() method to be working in edge browser as well. So thought of using the "string.prototype.matchall" npmjs package

I have installed this package and imported in my main.js file like so

import 'string.prototype.matchall';

I have to use this method in other file say Input.js. so I use like below

const matchAll = require('string.prototype.matchall');

And in the method where this I actually match the strings is below

replace = (original_string) => {
  const regex_pattern = /\\d+@*)]/g;
  const matchAll = require('string.prototype.matchall'); 
  const matches = original_string.matchAll(regex_pattern);
  return matches;
}

but matchAll variable is unused. How do I use this string.prototype.matchall polyfill. Could someone help me with this? Thanks.


Solution

  • Because the package implements the es-shim API, you should call the shim() method...

    require('foo').shim or require('foo/shim') is a function that when invoked, will call getPolyfill, and if the polyfill doesn’t match the built-in value, will install it into the global environment.

    This will let you use String.prototype.matchAll().

    const matchAll = require('string.prototype.matchall')
    matchAll.shim()
    
    const matches = original_string.matchAll(regex_pattern)
    

    Otherwise, you can use it stand-alone

    require('foo') is a spec-compliant JS or native function. However, if the function’s behavior depends on a receiver (a “this” value), then the first argument to this function will be used as that receiver. The package should indicate if this is the case in its README

    const matchAll = require('string.prototype.matchall')
    
    const matches = matchAll(original_string, regex_pattern)
    

    To use an ES6 module import, you would use something like this at the top of your script (not within your replace function)

    import shim from 'string.prototype.matchall/shim'
    shim()