[英]Regex that can match and return a part of text while remove the rest to make gender specific text possible
不知道該嘗試什么。 我一直關閉這些,因為有人告訴我它沒有解釋,不具體,無論如何。 也許不是立即關閉它,這個網站上的人可以幫助我嗎? 這有可能不立即關閉線程並且在任何人甚至可以提出問題之前關閉線程嗎?
在 Javascript(Google App 腳本)中。
String="當 [他/她] 完成后,我希望 [他/她] 到 go 到 [他/她] 身邊。"
我試圖弄清楚的正則表達式會允許結果是:“我希望他完成后將 go 帶到他身邊。”
共同因素將是 [.../...]
由於這個問題的后半部分看起來太混亂了,我一直在任何人有機會發表評論之前關閉這個問題……我將在第二篇文章中再次提出幾乎完全相同的問題。 您可能會猜到我的后續問題是什么,但顯然這樣問是不合適的……如果您知道我要問什么並且可以回答,我會加分。
正則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”,在我們的例子中是 either/or 組中的第一個。 使用$2
作為第二個選項。 把它放在一個 function 中:
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);
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.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.