【问题标题】:JavaScript RegExp to match ElementIdJavaScript RegExp 以匹配 ElementId
【发布时间】:2016-06-01 08:17:12
【问题描述】:

我需要将 elementId 与以 elementId 开头的任何其他子元素 ID 匹配。例如, 子元素的 ID 标记为 1-1、1-2、...、4-5、...、8-13 等。 所以,如果 Element ID 是 2,我需要通过过滤得到这个元素的所有子元素(结果应该是 2-1, 2-2, 2-3,...) 我尝试使用这种模式,但它不起作用。

var regEx = '/['+elementId+']*/';
//elementsId is a var derived from a previous expression

为了匹配这个,我应该使用什么 RegExp 模式?我在下面提供了代码段。

jsPlumb.draggable(newAgent, {
                containment: 'parent'
            });
            newAgent.on('click', '.cancel', function (e) {

                alert( newAgent.attr('id'));
                var elementId= newAgent.attr('id');
                var regEx = '/['+elementId+']*/';
                alert (regEx);

                for(var m=0; m<list.length; m++)
                {
                    if(list[m][0].exec(regEx) || list[m][1].exec(regEx))
                    {
                        alert('Deleting connection between ' + list[m][0] + '&' + list[m][1]);
                    }
                }

                jsPlumb.detachAllConnections(newAgent.attr('id'));
                jsPlumb.removeAllEndpoints(newAgent.attr('id'));
                jsPlumb.detach(newAgent.attr('id'));
                $(newAgent).remove();
            });

【问题讨论】:

  • var regEx = '/\['+elementId+'[^\]]*\]/';试试这个正则表达式

标签: javascript regex jsplumb


【解决方案1】:

您可以使用构造函数构建正则表达式,知道您需要手动转义特殊字符:link

var ids = ["1-1", "2-1", "2-2", "3-1", "3-2", "3-3", "3-4", "3-5"];

var buildRegex = function(id) {
  return new RegExp(id + '\\-\\d+');
}

for (var i = 1; i <= 3; ++i) {
  var reg = buildRegex(i);
  for (var k = 0; k < ids.length; ++k) {
    if (reg.test(ids[k])) {
      console.log(ids[k] + " is a sub element of " + i);
    }
  }
}

【讨论】:

  • 谢谢。现在可以使用了。
【解决方案2】:

我认为您的正则表达式应该等于:'^' + elementId + '-'
这将检查以 elementid- 开头的元素

【讨论】:

    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2011-07-25
    • 2017-02-11
    • 1970-01-01
    相关资源
    最近更新 更多