Регулярное выражение, которое может сопоставлять и возвращать часть текста, удаляя остальную часть, чтобы можно было указать пол c текста. - PullRequest
0 голосов
/ 27 мая 2020

Не знаю, что попробовать. Я продолжаю закрывать их, потому что мне сказали, что это не объясняется, не уточняется c, что угодно. Возможно, вместо того, чтобы немедленно закрыть это, кто-нибудь на этом сайте может быть достаточно любезным, чтобы помочь мне? Возможно ли это, не прерывая поток мгновенно и до того, как кто-нибудь сможет задать вопрос?

В Javascript (скрипты приложений Google).

String = "Я хочу [его / ее] на go на [его / ее] сторону, когда [он / она] готов ».

Какое регулярное выражение, которое я пытаюсь вычислить, позволит получить результат:« Я хочу его к go на его сторону, когда он закончит. "

Общий множитель будет [... / ...]

Поскольку вторая половина этого вопроса кажется слишком запутанной и я продолжаю закрывать вопрос, прежде чем у кого-нибудь будет возможность прокомментировать .... Я задам почти тот же самый вопрос снова во втором посте. Вы можете догадаться, какой будет у меня следующий вопрос, но, очевидно, это неуместно задавать ... Я дам дополнительные коричневые ie баллов, если вы знаете, что я собираюсь спросить, и можете на него ответить.

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Шаблон, представленный в 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);
0 голосов
/ 27 мая 2020

не javascript, а решение регулярного выражения с sed

$ echo "I want [him/her] to go to [his/her] side when [he/she] is done." | 
  sed -E 's_\[([^/]+)/[^]]+\]_\1_g'

I want him to go to his side when he is done.

, вам нужно избегать квадратных скобок при буквальном использовании, поскольку это специальный символ регулярного выражения.

легко изменить на получить вторую альтернативу

 ...  | sed -E 's_\[([^/]+)/([^]]+)\]_\2_g'

I want her to go to her side when she is done.
0 голосов
/ 27 мая 2020
var myStr = 'I want [him/her] to go to [his/her] side when [he/she] is done.';
var newStr = myStr.replace(/\[him\/her\]/g, "him").replace(/\[his\/her\]/g, "his").replace(/\[he\/she\]/g,"he");

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...