Swift Regex从页面html

时间:2019-02-14 08:27:40

标签: html swift regex token

我有一个这样的页面html:

<!DOCTYPE html>
   <html>
  <head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
    <meta name="viewport" content="width=device-width, initial- 
    scale=1"/>
    <title>Odoo</title>
    <link type="image/x-icon" rel="shortcut icon" 
   href="/web/static/src/img/favicon.ico"/>
    <script type="text/javascript">
                var odoo = {
                    csrf_token: 
    "999b60e0c81591c5909866b2421e01ff397bcc16o",
                };
             </script>
       <meta name="theme-color" content="#875A7B"/>

我想获取csrf_token的值,我该怎么做?

我尝试了类似的方法

let a = text!.matchingStrings(regex: "\"csrf_token\":([A-z0-9]*")

extension String {
  func matchingStrings(regex: String) -> [[String]] {
     guard let regex = try? NSRegularExpression(pattern: regex, 
  options: []) else { return [] }
    let nsString = self as NSString
    let results  = regex.matches(in: self, options: [], range: 
  NSMakeRange(0, nsString.length))
    return results.map { result in
        (0..<result.numberOfRanges).map {
            result.range(at: $0).location != NSNotFound
                ? nsString.substring(with: result.range(at: $0))
                : ""
        }
    }
    }
  }

但是它不起作用。

任何帮助将不胜感激。

编辑

像@Pushpesh Kumar Rajwanshi一样,建议的解决方案是

让regex =尝试NSRegularExpression(pattern:“ \” csrf_token \“:([A-z0-9] *”)

1 个答案:

答案 0 :(得分:1)

为什么csrf_token括在字符串中而不用双引号引起来。 csrf_token:后似乎也有空格,因此您的正则表达式无法正常工作。您可以使用此正则表达式,

csrf_token:\s*"([^"]*)"

然后捕获group1以提取csrf_token属性的文本。用您的语言,您可能必须像在正则表达式中一样逃避"

Demo