There is some errors by the way, missing # in template1.regex and $ in template2.regex, sorry for that.
> 在 2018年9月8日,上午12:52,单元源 <[email protected]> 写道: > > No no no, the regex provided here may be included from some where out of your > control, all you need to do is replacing the matched part in input string. > This is may be useful when you need to do something like this: > > const template1 = { > data: 'USA#1', > regex: /(\w+)\/(\d+)/ > } > const template2 = { > data: 'Mongo$6', > regex: /(\w+)\/(\d+)/ > } > const template3 = { > data: 'I am a Javascript Coder age 28', > regex: /I am a (\w+) Coder age (\d+)/ > } > > const handler = (template, family, version) => { > // the replacers here may be more complex, it is just a simple example, > nothing more. > return template.data.replace(template.regex, x => family, x => version); > } > > // INPUT: template1, CHINA 99 OUTPUT: CHINA#99 > // INPUT: template3, Golang 20 OUTPUT: I am a Golang Coder age 20 > > Here I use template 1/2/3, it may be some alias instead of real template. For > example we may make a map of template, then I just need hander(alias, family, > version) to generate some meaningful string. Of cause you could write it in > some other way, I just want to show what can this feature do. > > > >> 在 2018年9月7日,下午11:19,Peter Jaszkowiak <[email protected] >> <mailto:[email protected]>> 写道: >> >> All you have to do is write the regex differently: >> >> ``` >> input.replace( >> /(your )(\w+)( from )(\w+)/, >> (w, a, b, c, d) => `${a}${b.toUpperCase()}${c}${d.toLowerCase()}` >> ); >> ``` >> >> On Fri, Sep 7, 2018, 09:08 sion <[email protected] >> <mailto:[email protected]>> wrote: >> Emmmmm, pretty sorry for misleading you… >> >> Your solution will not work if I just provide you a regex without telling >> you detail information, all I want is replace first and second word matched >> by the regex, nothing more. >> >> >>> 在 2018年9月7日,下午10:57,Peter Jaszkowiak <[email protected] >>> <mailto:[email protected]>> 写道: >>> >>> ``` >>> input.replace( >>> /your (\w+) from (\w+)/, >>> (w, a, b) => `your ${a.toUpperCase()} from ${b.toLowerCase()}` >>> ); >>> ``` >>> >>> On Fri, Sep 7, 2018, 08:49 sion <[email protected] >>> <mailto:[email protected]>> wrote: >>> This is just a very simple example, of cause you could write it like that. >>> >>> >>> Maybe my second example is unsuitable, how about this one: >>> >>> input.replace(/your \w+ from \w+/, a => a.toUpperCase(), b => >>> b.toLowerCase()); >>> >>> INPUT: your friend from USA OUTPUT: your FRIEND from usa >>> >>> Actually, I am not very familiar with regex, I wonder if there is any >>> performance issue if we support this kind of feature. >>> >>> >>> >>>> 在 2018年9月7日,下午10:13,Peter Jaszkowiak <[email protected] >>>> <mailto:[email protected]>> 写道: >>>> >>>> You do know that all capture groups are passed to the function, right? You >>>> can write your second example like this, even though the capture groups >>>> are totally useless: >>>> >>>> ``` >>>> input.replace( >>>> /your (\w+) from (\w+)/g, >>>> (whole, a, b) => 'your book from amazon' >>>> ); >>>> ``` >>>> >>>> On Fri, Sep 7, 2018, 07:23 sion <[email protected] >>>> <mailto:[email protected]>> wrote: >>>> >>>> Is it possible to enhance the string.prototype.replace(regex, func) ? >>>> >>>> By now, we can do something like this: >>>> >>>> input.replace(/(^|_)[a-z]/g, a => a[a.length - 1].toUpperCase()); >>>> INPUT: ab_cd_ef OUTPUT: abCdEf >>>> >>>> >>>> However, i want something more powerfull, like this: >>>> >>>> input.replace(/your (\w+) from (\w+)/g, a => 'book', b => 'amazon’); >>>> INPUT: your friend from china OUTPUT: your book from amazon >>>> >>>> As you can see, I just want the replace could replace multi fragments at >>>> the same time. And I don’t think there is any conflicts with other >>>> principles of string.prototype.replace. >>>> >>>> _______________________________________________ >>>> es-discuss mailing list >>>> [email protected] <mailto:[email protected]> >>>> https://mail.mozilla.org/listinfo/es-discuss >>>> <https://mail.mozilla.org/listinfo/es-discuss> >>> >> >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

