【问题标题】:How to extract a string using JavaScript Regex?如何使用 JavaScript 正则表达式提取字符串?
【发布时间】:2010-12-15 00:07:13
【问题描述】:

我正在尝试使用 JavaScript 正则表达式从文件中提取子字符串。这是文件中的一个片段:

DATE:20091201T220000
SUMMARY:Dad's birthday

我要提取的字段是“摘要”。方法如下:

extractSummary : function(iCalContent) {
  /*
  input : iCal file content
  return : Event summary
  */
  var arr = iCalContent.match(/^SUMMARY\:(.)*$/g);
  return(arr);
}

【问题讨论】:

    标签: javascript regex string icalendar


    【解决方案1】:
    function extractSummary(iCalContent) {
      var rx = /\nSUMMARY:(.*)\n/g;
      var arr = rx.exec(iCalContent);
      return arr[1]; 
    }
    

    您需要进行以下更改:

    • * 放在括号内为 上面建议。否则你的匹配 组将只包含一个 特点。

    • 去掉^$。使用 global 选项,它们匹配整个字符串的开头和结尾,而不是行的开头和结尾。而是匹配显式换行符。

    • 我想你想要匹配组(什么是 括号内)而不是 完整的阵列? arr[0] 是 完整匹配 ("\nSUMMARY:...") 和 下一个索引包含该组 匹配。

    • String.match(regexp) 是 应该返回一个数组 火柴。在我的浏览器中它没有(Mac 上的 Safari 只返回完整的 匹配,而不是组),但是 Regexp.exec(string) 有效。

    【讨论】:

    • 我会将它与@barkmadley 的|| [null, null] 结合起来,因为如果匹配失败,arr 将为空,arr[1] 将引发异常
    【解决方案2】:

    你需要使用mflag:

    多行;将开始和结束字符(^ 和 $)视为有效 多行(即匹配每行的开头或结尾 (由 \n 或 \r 分隔),不仅是开头或结尾 整个输入字符串)

    同时将* 放在正确的位置:

    "DATE:20091201T220000\r\nSUMMARY:Dad's birthday".match(/^SUMMARY\:(.*)$/gm);
    //------------------------------------------------------------------^    ^
    //-----------------------------------------------------------------------|
    

    【讨论】:

      【解决方案3】:

      你的正则表达式很可能是

      /\nSUMMARY:(.*)$/g
      

      我喜欢使用的一个有用的小技巧是在匹配数组时默认分配。

      var arr = iCalContent.match(/\nSUMMARY:(.*)$/g) || [""]; //could also use null for empty value
      return arr[0];
      

      这样你在使用arr时就不会遇到烦人的类型错误

      【讨论】:

      • match 如果没有 match 则返回 null
      【解决方案4】:

      (.*) 而不是 (.)* 将是一个开始。后者只会捕获该行的最后一个字符。

      另外,不需要转义:

      【讨论】:

        【解决方案5】:

        此代码有效:

        let str = "governance[string_i_want]"; 
        let res = str.match(/[^governance\[](.*)[^\]]/g);
        console.log(res);

        res 将等于“string_i_want”。但是,在这个例子中 res 仍然是一个数组,所以不要把 res 当作一个字符串。

        通过对我不想要的字符进行分组,使用 [^string],并匹配括号之间的内容,代码提取出我想要的字符串!

        您可以在这里试用:https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_match_regexp

        祝你好运。

        【讨论】:

          【解决方案6】:

          你应该使用这个:

          var arr = iCalContent.match(/^SUMMARY\:(.)*$/g);
          return(arr[0]);
          

          【讨论】:

            【解决方案7】:

            这就是您可以使用 javascript 解析 iCal 文件的方法

                function calParse(str) {
            
                    function parse() {
                        var obj = {};
                        while(str.length) {
                            var p = str.shift().split(":");
                            var k = p.shift(), p = p.join();
                            switch(k) {
                                case "BEGIN":
                                    obj[p] = parse();
                                    break;
                                case "END":
                                    return obj;
                                default:
                                    obj[k] = p;
                            }
                        }
                        return obj;
                    }
                    str = str.replace(/\n /g, " ").split("\n");
                    return parse().VCALENDAR;
                }
            
                example = 
                'BEGIN:VCALENDAR\n'+
                'VERSION:2.0\n'+
                'PRODID:-//hacksw/handcal//NONSGML v1.0//EN\n'+
                'BEGIN:VEVENT\n'+
                'DTSTART:19970714T170000Z\n'+
                'DTEND:19970715T035959Z\n'+
                'SUMMARY:Bastille Day Party\n'+
                'END:VEVENT\n'+
                'END:VCALENDAR\n'
            
            
                cal = calParse(example);
                alert(cal.VEVENT.SUMMARY);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-07-29
              • 2016-01-02
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多