jquery - 为什么 NSRegularExpression 不返回匹配索引?

标签 jquery regex swift cocoa nsregularexpression

假设我想遍历以下 HTML 以进行正则表达式匹配:

<ul class="product_images">
    <li>
        <a data-style-name="keyword_1">
            <img>
        </a>
    </li>
    <li>
        <a data-style-name="keyword_2">
            <img>
    </a>
    </li>
</ul>

我可以使用像 Kanna 这样的解析器和 Block 迭代器方法,如 NSRegularExpression计算 <li> 的每个实例并返回第一个匹配项的索引,然后我可以使用它来模拟鼠标单击匹配元素,如下所示:

WKWebView.evaluateJavaScript("document.getElementsByClassName('product_images')[\(keywordIndex)].click()", completionHandler: nil)

但是使用像 $("li:contains('keyword_2')") 这样的 jQuery 选择器呢?反而?来自 Python 和 JavaScript,我很难适应 Swift 的语法,我觉得我可以使用 jQuery 选择器来压缩我的函数。大多数threads建议使用依赖项,但我想知道是否有一种方法可以在 Swift 中本地执行此操作 — 也许是 NSSelectorFromString ?就是说,如果任何精通该语言的人都可以为我指明正确的方向,我将不胜感激。我的代码示例如下。实际上,我无法计算每个 <li> 的数量。元素;我想单击包含 keyword_2 的那个.

片段

// Go to parent of match element and count each <li> element

func findKeyword() {
    var keyword = "keyword_2"
    var keywordIndex = 0
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.75) { 
            self.browserView.evaluateJavaScript("document.getElementsByTagName('html')[0].innerHTML.toString()", completionHandler: { (html: Any?, error: Error?) in
                if let HTML = html as? String {
                    let doc = try? Kanna.HTML(html: HTML, encoding: String.Encoding.utf8)
                    for string in (doc?.css("ul[class^='product_images']/li"))! {
                        if keyword(true, {$0 && string.text!.range(of: $1) != nil}) {
                            print("Found: " + string.text!)
                        }
                        keywordIndex += 1
                    }
                }
            })
    }
}

最佳答案

问题解决了!问题出在我的 for 循环中——特别是第一行:

for string in (doc?.css("ul[class^='product_images']/li"))! { ...

这里我使用 string 而我应该使用 keyword 因为那是我正在寻找的字符串。因此,我在上面的序列中将 string 替换为 keyword 并且一切顺利。

关于jquery - 为什么 NSRegularExpression 不返回匹配索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069840/

相关文章:

javascript - JS获取一个字符串经过表达式替换几次

ios - 使用 cornerRadius 获取 UIView 中矩形的大小

jquery - 使用 Jquery Bootgrid 的 Asp.Net MVC 应用程序不显示任何结果

javascript - 如何使用 jquery 验证表单?

javascript - 如何使用 jQuery 查找输入值中的数字并隐藏数字

c# - 正则表达式分割字符串,尊重引号并保留键=值对

javascript - 当链接在新选项卡中打开时如何保留在当前窗口选项卡上

javascript - jQuery 的 parseJSON 中的正则表达式测试返回 false - 为什么?

swift - 为什么需要在代码后缀中添加 '!'

swift - 设置惰性静态变量首先初始化然后分配?