javascript - 如何匹配字符,但如果它们严格用引号引起来则不匹配

标签 javascript regex regex-negation regex-group

范围

假设我们有一个字符串你好,你的狗吗? “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),否则,其他上下文中的任何 dg 都与 [dg] 然后在replace回调方法中替换。

关于javascript - 如何匹配字符,但如果它们严格用引号引起来则不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45818951/

相关文章:

regex - Sed 匹配数字后跟字符串并返回数字

Python正则表达式否定强制字符出现

javascript - 解析云代码查询不返回任何内容

javascript - 列出所有嵌套属性及其在包含对象中的完整路径

php 将 preg_replace 转换为 preg_replace_callback

java - 正则表达式最佳实践

javascript - 如何反转我的正则表达式的结果

javascript - 用于匹配名字后跟没有空格的正则表达式

javascript - jQuery根据Class获取ID,写入HTML并fadeIn

javascript - Angular2 Material 中的 Md-ripple