19 lines
1.2 KiB
Plaintext
19 lines
1.2 KiB
Plaintext
If the first parameter of ``++String.replace++`` is a regular expression, a special syntax can be used in the replacement string to reference capturing groups. Use ``++$n++`` to reference the group by number and ``++$<Name>++`` to reference the group by name. Because replacements strings in ``++String.replace++`` are interpreted at runtime, nothing prevents you to reference nonexisting group, with nonexisting index or bad name, then the resulting string will be wrong.
|
||
This rule statically validates that all referenced groups exist when replacing with ``++String.replace++`` or ``++String.replaceAll++`` methods.
|
||
|
||
== Noncompliant Code Example
|
||
|
||
----
|
||
const str = 'James Bond';
|
||
console.log(str.replace(/(\w+)\s(\w+)/, '$1, $0 $1')); // Noncompliant, index is 1-based, '$0' does not exist, prints 'James, $0 James'
|
||
console.log(str.replace(/(?<firstName>\w+)\s(?<lastName>\w+)/, '$<surname>, $<firstName> $<surname>')); // Noncompliant '$<surname>' does not exist, prints ', James '
|
||
----
|
||
|
||
== Compliant Solution
|
||
|
||
----
|
||
const str = 'James Bond';
|
||
console.log(str.replace(/(\w+)\s(\w+)/, '$2, $1 $2'));
|
||
console.log(str.replace(/(?<firstName>\w+)\s(?<lastName>\w+)/, '$<lastName>, $<firstName> $<lastName>'));
|
||
----
|