【问题标题】:Remove everything after a certain character删除某个字符后的所有内容
【发布时间】:2011-08-03 15:14:26
【问题描述】:

有没有办法删除某个角色之后的所有内容,或者只选择该角色之前的所有内容?我从一个 href 到 "?" 获取值,它总是会有不同数量的字符。

这样

/Controller/Action?id=11112&value=4444

我希望 href 仅为 /Controller/Action,所以我想删除“?”之后的所有内容。

我现在正在使用这个:

 $('.Delete').click(function (e) {
     e.preventDefault();

     var id = $(this).parents('tr:first').attr('id');                
     var url = $(this).attr('href');

     console.log(url);
 }

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:
    var s = '/Controller/Action?id=11112&value=4444';
    s = s.substring(0, s.indexOf('?'));
    document.write(s);
    

    Sample here

    我还应该提到,本机字符串函数比正则表达式快得多,正则表达式只应在必要时真正使用(这不是其中一种情况)。

    更新代码以说明没有'?':

    var s = '/Controller/Action';
    var n = s.indexOf('?');
    s = s.substring(0, n != -1 ? n : s.length);
    document.write(s);
    

    Sample here

    【讨论】:

    • 这个意大利面条代码不应该是最好的答案。查看拆分方法答案
    • LoL - 不知何故,那些不了解正则表达式以及拆分如何运作的人获得了投票权。了解 String 方法就足够了。最不了解事物的工作原理和最大的代码规则世界:P 所以我在拆分答案中添加了逐步解释(以改变世界)。
    • LoL - 拆分可以接受正则表达式,所以 +1 不使用拆分?大声笑 - Javascript 使用正则表达式,所以 +1 不使用 Javascript?更多的代码和复杂性如何使它成为一项简单的任务?正则表达式和拆分不是更简单更有效吗?
    • @LastTribunal 我今天实际上改变了答案。拆分是更灵活和更清洁的解决方案。
    【解决方案2】:

    您也可以使用split() 函数。这似乎是我想到的最简单的一个:)。

    url.split('?')[0]
    

    jsFiddle Demo

    一个优点是即使字符串中没有?,这种方法也可以工作——它会返回整个字符串。

    【讨论】:

    • 在这种情况下 [0] 做了什么?
    • split 返回一个数组(在本例中它有两个元素,01),[0] 获取返回数组的第一个元素。
    • +1,最好的一点是它总是有效,即使没有'?'
    • 喜欢这个答案,如此简单,但它给你的东西却非常强大
    • 我实际上改变了这个答案,因为它更灵活,整体上只是一个更清洁的解决方案。
    【解决方案3】:
    var href = "/Controller/Action?id=11112&value=4444";
    href = href.replace(/\?.*/,'');
    href ; //# => /Controller/Action
    

    如果找到“?”,这将起作用如果没有

    【讨论】:

    • 这只会删除“?”和其他一些 OP 没有要求
    • 这将删除?(包括)之后的所有内容
    • 最佳答案! OP 要求删除 ? 之后的所有内容,并明确声明要删除 ? 还说:我希望 href 仅是 /Controller/Action
    【解决方案4】:

    它非常适合我:

    var x = '/Controller/Action?id=11112&value=4444';
    var remove_after= x.indexOf('?');
    var result =  x.substring(0, remove_after);
    alert(result);
    

    【讨论】:

      【解决方案5】:

      派对可能很晚了:p

      您可以使用反向引用$'

      $' - Inserts the portion of the string that follows the matched substring.
      

      let str = "/Controller/Action?id=11112&value=4444"
      
      let output = str.replace(/\?.*/g,"$'")
      
      console.log(output)

      【讨论】:

        【解决方案6】:

        如果你还想保留“?”并删除所有之后特定字符,你可以这样做:

        var str = "/Controller/Action?id=11112&value=4444",
            stripped = str.substring(0, str.indexOf('?') + '?'.length);
        
        // output: /Controller/Action?
        

        【讨论】:

        • 如果字符串不包含?,这将不起作用
        • @StephanBijzitter 是的,我知道。由于我的回答是:“如果您还想保留 ? ” - 显然字符串中必须有一个问号才能保留..
        • 奇怪,似乎我的评论是针对@Imran 的另一个答案。不知道为什么我把它贴在你的答案上。
        【解决方案7】:

        为我工作:

              var first = regexLabelOut.replace(/,.*/g, "");
        

        【讨论】:

          【解决方案8】:

          您也可以使用split() 方法,对我来说,这是实现此目标的最简单方法。

          例如:

          let dummyString ="Hello Javascript: This is dummy string"
          dummyString = dummyString.split(':')[0]
          console.log(dummyString)
          // Returns "Hello Javascript"
          来源:https://thispointer.com/javascript-remove-everything-after-a-certain-character/

          【讨论】:

          • 作者 kapa 已经使用 split 给出了正确的答案。与他的回答相比,这里没有太大区别。
          【解决方案9】:

          它可以使用 JavaScript 轻松完成以供参考,请参阅链接 JS String

          编辑 它可以很容易地完成。 ;)

          var url="/Controller/Action?id=11112&value=4444 ";
          var parameter_Start_index=url.indexOf('?');
          var action_URL = url.substring(0, parameter_Start_index);
          alert('action_URL : '+action_URL);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-26
            • 2018-04-03
            • 1970-01-01
            • 2020-07-19
            • 2014-04-28
            • 1970-01-01
            • 2015-10-23
            • 2018-12-09
            相关资源
            最近更新 更多