Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式,可以匹配并返回文本的一部分,同时删除其余部分以使性别特定的文本成为可能_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式,可以匹配并返回文本的一部分,同时删除其余部分以使性别特定的文本成为可能

Javascript 正则表达式,可以匹配并返回文本的一部分,同时删除其余部分以使性别特定的文本成为可能,javascript,regex,Javascript,Regex,不知道该试什么。我一直在关闭这些,因为我被告知它没有解释,没有具体的,无论什么。也许这个网站上的某个人可以帮助我,而不是立即关闭它?在没有人可以提问之前立即关闭线程,这是可能的吗 在Javascript(谷歌应用程序脚本)中 String=“我希望[他/她]完成后,他/她能回到[他/她]身边。” 我想弄清楚的正则表达式是什么,它会让结果是:“我希望他完成后回到他的身边。” 共同因素为[…/…] 因为这个问题的后半部分看起来太让人困惑了,我总是在别人有机会评论之前就把问题结束了……我会在第二篇文章

不知道该试什么。我一直在关闭这些,因为我被告知它没有解释,没有具体的,无论什么。也许这个网站上的某个人可以帮助我,而不是立即关闭它?在没有人可以提问之前立即关闭线程,这是可能的吗

在Javascript(谷歌应用程序脚本)中

String=“我希望[他/她]完成后,他/她能回到[他/她]身边。”

我想弄清楚的正则表达式是什么,它会让结果是:“我希望他完成后回到他的身边。”

共同因素为[…/…]

因为这个问题的后半部分看起来太让人困惑了,我总是在别人有机会评论之前就把问题结束了……我会在第二篇文章中再次问几乎相同的问题。你可能会猜到我的后续问题是什么,但显然这不适合问……如果你知道我要问什么并且能回答的话,我会给你额外的分数

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");

希望有帮助。

不是
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.

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
标志,我们得到了这一点,因为我们正在寻找的字符串模式充满了RegExp特有的字符:

const pronounPattern = /\[([^\/]*)\/([^\]]*)]/g;
现在,当我们进行匹配/替换时,因为我们有捕获组,所以我们得到一个伪数组,索引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);

我不知道以前有什么密切的原因,但我们要求提问的人做的一件事是展示他们在问题中的尝试。如果您已经尝试过一些正则表达式代码,那么查看您已经尝试过的内容会有所帮助。这样想吧;这个网站更多的是关于“帮助我解决这个问题”,而不是“为我解决这个问题”。如果我真的理解regex,这可能是可能的。我通过看别人做什么来学习。我通常会来到这个网站,找到一个与我需要的足够接近的解决方案。在这种情况下,我无法找到接近的东西。我能想到的最好方法是匹配所有带括号的字符串,去掉括号,在斜线上拆分,然后从中返回0,1,但它非常笨重。我假设有一个正则表达式。通过看到结果,我能更好地理解它。我不知道sed,但这看起来很接近我想要得到的,你回答了我不允许问的奖金问题!!做得好!!!我将尝试找出javascript的等价物是什么,除非其他人知道您的意思,并且知道javascript代码过于文字化。我需要能够将任何男性性别术语或代词放在前半部分,并且结果总是只显示前半部分。相反,当解析女性时,我会得到一个结果,每次出现都会返回后半部分。谢谢你不仅理解了一些人似乎感到困惑的问题,而且提供了我想要达到的精确优雅。这有点太贪婪了。我想我是用/[([^\/?!]]+)\/([^]]+]]/g算出的,如果在斜杠前面加上“?”,则需要取消匹配。有些情况下[某物]匹配不正确。