如何匹配字符,但如果它们严格包含在引号中则不匹配

时间:2017-08-22 13:25:55

标签: javascript regex regex-negation regex-group

SCOPE

假设我们有一个字符串$(document).ready(function(){ $('select.car-selector').change(function () { var packagePrice = $(".car-selector option.b:selected").val(); if(packagePrice!=undefined) $('div.price-here').text(packagePrice + " USD"); else $('div.price-here').text("Default price"); }); })

需要量

我想要一个正则表达式,它给出d或g的出现,但不是当它们严格(没有其他字符)用引号括起来时。

因此,在上面的字符串中,匹配的出现次数(包含在{}中) <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <form> <select class="car-selector"> <option class="a" value="" selected>Select brand</option> <option class="b" value="150">Volvo</option> <option class="b" value="350">Saab</option> <option class="b" value="150">Opel</option> <option class="b" value="500">Audi</option> </select> </form> <br /><br /> <div class="price-here">Default price</div>

修改

我正在尝试这样的事情:

hello how are you dog? "d" I am "good" "g" ha good

注意

我在Javascript工作。无法想出一个模式。

由于

3 个答案:

答案 0 :(得分:0)

这是一种方法:

使用string的{​​{1}},使用功能方法和正则表达式

replace

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

<强>解释

正则表达式首先尝试匹配双引号字符串 - g。如果匹配它的捕获。如果不是,则会尝试匹配并捕获字符其他而不是"[^"]*"d - g

如果上述其中一个匹配,则将其作为参数[^dg]发送给该函数。

如果没有匹配,则完整匹配作为参数b发送,这将是最后的替换,在括号a之外。

因此,该函数在.参数中获取有效字符/字符串,或在b中获取无效。如果a未定义,请在b上执行 ,否则只需返回a

b

答案 1 :(得分:0)

您需要一个与您不需要的子串(您将要替换的子串)匹配的正则表达式,并匹配并捕获您需要保留的内容。我假设您要保留"g""d"。使用

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

请参阅regex demo

将完成最终工作的代码:

&#13;
&#13;
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|
&#13;
&#13;
&#13;

因此,("[gd]")匹配并将"g""d"捕获到第1组中,如果匹配,则在替换期间粘贴该值(请参阅$1 ? $1),否则,其他上下文中的任何dg都与[dg]匹配,然后在替换回调方法中替换。

答案 2 :(得分:0)

总结要求

  • 至少2个字母引用
  • 包括d或g

然后regexp = /"(?=g|d)[^"]{2,}"/gi

  1. 以双引号开头
  2. 向前搜索g或d
  3. 后面应该有2个以上的字母(包括g或d)
  4. 以双引号结尾
  5. 测试

    (`no quote = dog god d g 
     1 letter only = "d" "g"  
     2+ letters = "go" "do" "dog" "god", "GoOD"
    `).match(/"(?=g|d)[^"]{2,}?"/gi)
    // ["go", "do", "dog", "god", "GoOD"]
    // then do what you want..