正则表达式未正确应用

时间:2019-08-22 07:58:33

标签: jquery regex

我有一个通过正则表达式检查传递的字符串值数组,但是有一些不应该传递的字符串。 我在一个在线正则表达式工具(以Regexpal.com为例)上检查了该表达式,它似乎可以正常工作,但是在应用时不起作用。

我的表达式如下:

function adjustSize() {
  $('.ggowl-background-wrapper').each(function(){
      var ggowlData = jQuery.parseJSON( $(this).attr('data-ggowl'));
      $(this).css('background-image', 'url(' + ggowlData.backgroundimage + ')'); // working fine - Tested

      if(ggowlIsBreakPoint(ggowlDataLoder.sm)){
          console.log("Small");
          $(this).css('background-position', ggowlData.backgroundposition_sm);
      }else if(ggowlIsBreakPoint(ggowlDataLoder.md)){
            console.log("medium");
          $(this).css('background-position', ggowlData.backgroundposition_md);
      }else {
            console.log("Large");
         $(this).css('background-position', ggowlData.backgroundposition_lg); //this is only getting loaded
      }
  });
}

//add the event listener to get the window width 
//everytime the window is being resized
$(window).on('resize', adjustSize);
//Execute once inside the load listener 
adjustSize();

因此,这应该与一个或多个文本阅读组匹配     “(texthere123)”或零个或多个读取为“-”的文本

我包括一个JsFiddle链接来表明这一点。

/^\([a-zA-Z0-9]+\)|([-])*/i
var options = ["something", "new", "-", "(testing)"];
jQuery.each(options, function(i, val){
    console.log({i: i, val: val});
    if (/^\([a-zA-Z0-9]+\)|([-])*/i.test(i))
        console.log({type: "matched"});
    else
        console.log({type: "not matched"});
});

https://jsfiddle.net/tnhmy68a/

1 个答案:

答案 0 :(得分:1)

您需要测试val而不是i,因为i是索引号。匹配零个或多个-的正则表达式的第二部分可以是-*

此外,您还需要通过在每个部分周围添加^和$来强制匹配整个字符串(请注意,它们的作用域以|分隔符结尾,这就是为什么我将它们两次包含在内)的原因。

var options = ["something", "", "-", "--", "-bla", "not-this", "(testing)", "(texthere123)"];

jQuery.each(options, function(i, val) {
    if (/^\([a-zA-Z0-9]+\)$|^-*$/i.test(val))
        console.log(`Matched     : i = ${i}, val = "${val}"`);
    else
        console.log(`Not matched : i = ${i}, val = "${val}"`);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>