Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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_Regex Negation_Regex Group - Fatal编程技术网

Javascript 如何匹配字符,但如果字符严格括在引号中,则不匹配

Javascript 如何匹配字符,但如果字符严格括在引号中,则不匹配,javascript,regex,regex-negation,regex-group,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

范围

假设我们有一个字符串
你好,你的狗怎么样?“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工作。无法想出一个模式


谢谢

这里有一种方法:

使用
字符串
替换
、使用函数方法和正则表达式

("[^"]*"|[^dg])|.
您可以检查捕获是否匹配任何内容。如果不匹配,则匹配的是要替换/删除/转换的
d
g
(或其他;)。在本例中,我将其改为大写

说明:

正则表达式首先尝试匹配双引号字符串-
“[^”]*”
。如果该字符串匹配它的捕获。如果它不匹配,则尝试匹配并捕获除
d
g
-
[^dg]
以外的字符

如果上述其中一项匹配,它将作为参数
b
发送到函数

如果没有匹配项,则完整的匹配项将作为参数
a
发送,这将是最后的替代项,位于括号
之外

因此,函数要么在
b
参数中获取有效的字符/字符串,要么在
a
中获取无效的字符/字符串。如果
b
未定义,则在
a
上执行任何操作,否则只返回
b

var str='你好,你的狗怎么样?'d“我很好”g“很好”;
文件写入(str.replace(/(“[^”]*”|[^dg])|/g,函数(a,b){
如果(b==未定义)
返回a.toUpperCase();
返回b;

}));这里有一种方法:

使用
字符串
替换
、使用函数方法和正则表达式

("[^"]*"|[^dg])|.
您可以检查捕获是否匹配任何内容。如果不匹配,则匹配的是要替换/删除/转换的
d
g
(或其他;)。在本例中,我将其改为大写

说明:

正则表达式首先尝试匹配双引号字符串-
“[^”]*”
。如果该字符串匹配它的捕获。如果它不匹配,则尝试匹配并捕获除
d
g
-
[^dg]
以外的字符

如果上述其中一项匹配,它将作为参数
b
发送到函数

如果没有匹配项,则完整的匹配项将作为参数
a
发送,这将是最后的替代项,位于括号
之外

因此,函数要么在
b
参数中获取有效的字符/字符串,要么在
a
中获取无效的字符/字符串。如果
b
未定义,则在
a
上执行任何操作,否则只返回
b

var str='你好,你的狗怎么样?'d“我很好”g“很好”;
文件写入(str.replace(/(“[^”]*”|[^dg])|/g,函数(a,b){
如果(b==未定义)
返回a.toUpperCase();
返回b;

}));您需要一个正则表达式,它将匹配您不需要的子字符串(您将替换的子字符串),并匹配和捕获您需要保留的内容。我假设您想保留
“g”
“d”
。使用

/("[gd]")|[dg]/g

以及完成最终工作的代码:

var rx=/(“[gd]”)|[dg]/g;
var s='你好,你的狗怎么样?“d”我“很好”g“很好”;
var res=s.replace(接收,功能($0,$1){
返回$1?$1:“|”;
});

console.log(res);//=>你好,你好吗?“d”I am“| oo |”g”ha | oo |
您需要一个正则表达式,它将匹配您不需要的子字符串(您将替换的子字符串),并匹配和捕获您需要保留的子字符串。我假设您想保留
“g”
“d”
。使用

/("[gd]")|[dg]/g

以及完成最终工作的代码:

var rx=/(“[gd]”)|[dg]/g;
var s='你好,你的狗怎么样?“d”我“很好”g“很好”;
var res=s.replace(接收,功能($0,$1){
返回$1?$1:“|”;
});
console.log(res);//=>你好,你好吗?“d”我是“| oo |”g”哈| oo |
总结需求

  • 报价中至少有2封信
  • 包括d或g
然后regexp=
/“(?=g|d)[^”]{2,}”/gi

  • 以双引号开始
  • 查找g或d的前瞻性搜索
  • 下面应该有2个以上的字母(包括g或d)
  • 以双引号结束
  • 试验

    总结要求

    • 报价中至少有2封信
    • 包括d或g
    然后regexp=
    /“(?=g|d)[^”]{2,}”/gi

  • 以双引号开始
  • 查找g或d的前瞻性搜索
  • 下面应该有2个以上的字母(包括g或d)
  • 以双引号结束
  • 试验


    您还需要添加一些代码,以便正则表达式在这种情况下工作。您正在提取还是替换?只是为了让您知道我正在替换。是否删除或替换为其他值?请完成问题中的测试用例。'lookahead'?=适用于此场景。:)@user943702它可能在javascript中不起作用。在这种情况下,您还需要为正则表达式添加一些代码。您正在提取还是替换?只是为了让您知道我正在替换。是否删除或替换为其他值?请完成问题中的测试用例。'lookahead'?=适用于此场景。:)@user943702可能在javascript中不起作用。我错过了“(无其他字符)”部分:S-因此这比要求的(处理字符串中任意位置的d和g')要多一些,但在它们单独使用时仍然有效。我错过了“(无其他字符)”部分:S-