【问题标题】:Javascript: string regexJavascript:字符串正则表达式
【发布时间】:2016-01-24 10:38:19
【问题描述】:

我正在调用一个函数getParentElm(idStr,element),它接受一个id和一个元素,并在html树中搜索直到找到一个id等于idStr.的父元素

调用代码:

var s = "someId";  
var el = getParentElm(s,element);

我希望idStr 参数可以处理与"someId" 匹配的字符串,例如"someId123"
我试过了:

var s = "/someId/"; 

但它不起作用。理想情况下,我不想碰getParentElm 函数。

更新:感谢 vbranden。
我试过: var s = /someId/ 并且有效。我赞成你的评论。谢谢大家:)

【问题讨论】:

  • 应该匹配 someId123 吗?还是只适用于 someId
  • 如果您向 getParentElm 函数提供正则表达式,则它需要进行正则表达式匹配。如果它只是做一个 === 那么你需要修改函数以接受正则表达式。
  • 同意。查看 W3C 关于 JS 正则表达式 @w3schools.com/jsref/jsref_match.asp 的教程。我认为 S 必须是 var s = /someId/ (不带双引号)
  • 如果您可以与我们分享您的 getParentElem 函数的实现,可能会有所帮助。
  • var s = /someId/;或 var s = new RegExp("someId");

标签: javascript jquery regex


【解决方案1】:

在这里,这应该可以工作:

function getParentElm(idStr,element) {
   var patt = new RegExp(idStr +".*");
   while(element.parentNode)
   {  
      if(patt.test(element.parentNode.id))
        return element.parentNode;
      element=element.parentNode;
   }
   return false;
}

然后以这种方式调用函数:

var el = getParentElm("someId",document.getElementById('foo'));

【讨论】:

  • 这在哪里满足将可接受的 id 限制为以“someId”开头的要求?或解决他关于正则表达式的问题?
  • .* 将匹配之后的所有字母
  • @uʍopǝpısdn 答案中需要有一个正则表达式才能使用 .*
  • @vbranden 您只需将“someId”作为参数传递。检查编辑。
【解决方案2】:

不需要正则表达式。

使用closest 遍历dom,使用id* 匹配包含idStr 的id。

function getParentElm(idStr,element){
    return $(element).closest('[id*="' + idStr + '"]');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多