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]> 写道:
>
> 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