范围
假设我们有一个字符串你好,你的狗吗? “d”我“好”“g”哈好
要求
我想要一个正则表达式,它给出 d 或 g 的出现,但当它们严格(没有其他字符)括在引号中时则不出现。
因此,在上面的字符串中,匹配的事件将是(包含在 {} 中)
你好,你好吗{d}o{g}? “d”我是“{g}oo{d}”“g”哈{g}oo{d}
编辑
我正在尝试这样的事情:
//constructing a regex
re = RegExp(`(d|g)`, 'g')
newString = ""
'hello how are you dog? "d" I am "good" "g" ha good'
.split(re).map((word, index) => {
if (word.match(re) != null) {
console.log("match")
newString += "|" //replacement character
} else {
newString += word
}
})
注意
我正在使用 Javascript 工作。无法想出一个模式。
谢谢
最佳答案
您需要一个正则表达式来匹配您不需要的子字符串(您将替换的子字符串),并匹配和捕获您需要保留的内容。我假设您想保留 "g"
和 "d"
。使用
/("[gd]")|[dg]/g
请参阅regex demo
以及将完成最终工作的代码:
var rx = /("[gd]")|[dg]/g;
var s = 'hello how are you dog? "d" I am "good" "g" ha good';
var res = s.replace(rx, function($0,$1) {
return $1 ? $1 : "|";
});
console.log(res); // => hello how are you |o|? "d" I am "|oo|" "g" ha |oo|
因此,("[gd]")
匹配并将 "g"
或 "d"
捕获到组 1 中,并且如果它匹配,该值在替换期间被粘贴回来(参见 $1 ? $1
),否则,其他上下文中的任何 d
或 g
都与 [dg]
然后在replace回调方法中替换。
关于javascript - 如何匹配字符,但如果它们严格用引号引起来则不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45818951/