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

Reply via email to