我有一个通过正则表达式检查传递的字符串值数组,但是有一些不应该传递的字符串。 我在一个在线正则表达式工具(以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"});
});
答案 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>