Шаблон, представленный в RegExp
:
Starting [ = \[ (escaped since `[` has special meaning)
Option A = [^\/]* (any character except slash, repeated 0-to-many times)
Slash = \/ (escaped as above to differentiate from a RegExp literal terminator)
Option B = [^\]]* (any character except a `]`, repeated 0-to-many times)
Closing ] = ]
Итак, сложив все это вместе, с ()
для групп захвата и добавив флаг g
для глобального поиска, мы получите этот глоток, так как шаблон строки, который мы ищем, - это rife с символами, которые являются специальными для RegExp:
const pronounPattern = /\[([^\/]*)\/([^\]]*)]/g;
Теперь, когда мы выполняем сопоставление / замену, потому что у нас есть захват group мы получаем псевдо-массив, где индекс 0 является полным совпадением, 1 - вариант A, а 2 - вариант B. Это позволяет нам теперь выполнить замену строки. Например, если мы всегда хотим использовать вариант A, вы можете:
const replaced = yourString.replace(pronounPattern, '$1');
$1
означает «использовать группу захвата 1», которая в нашем случае является первой в группе либо / или. Для второго варианта используйте $2
. Собираем это вместе в функции:
const MALE = 1;
const FEMALE = 2;
const pronounPattern = /\[([^\/]*)\/([^\]]*)]/g;
function replacePronounPlaceholders(str, option) {
return str.replace(pronounPattern, '$' + option);
}
// Used like:
const replaced = replacePronounPlaceholders(
"I want [him/her] to go to [his/her] side when [he/she] is done.",
FEMALE);