0

我正在开发一个书签,它使用replaceText插件将页面上的所有单词(和无关空格/标点符号)包装在 span 标签中。该插件遍历页面上的所有文本节点,并允许我调用一个函数来操作每个节点的内容,而不会破坏页面上的任何其他 HTML 格式。(这都不是问题,我很确定,但我觉得上下文可能有用)。我的函数调用是这样的,供大家参考:

$("body *").replaceText(/\S+\s*/g, spanWrap);

问题是我发现的用于分隔这些单词的最佳正则表达式 - /\S+\s*/g- 包含块注释结尾的字符(“*/”)。如果我在 Notepad++ 的 .js 文件中的前几行添加块注释的开头,我可以看到语法高亮器正在读取它。

当我运行我的书签时,大多数网站似乎都没有遇到此问题,并且书签按预期工作。但是,由于我无法预测的原因,某些站点会抛出“ Uncaught SyntaxError: Unexpected token <”错误,并且小书签会中断/停止运行。如果我将replaceText函数中使用的正则表达式更改为我在早期版本的小书签中使用的正则表达式 -- /\b(\S+?)\b/g-- 在小书签中完全没有更改任何其他内容时,这些站点停止给出错误并且小书签工作正常很好,所以我必须相信是块注释关闭的存在导致了它。

不过,就我试图对小书签做的事情而言,其中带有注释闭包的表达式/\S+\s*/g————比另一个没有标点符号和空格的表达式好得多,好得多。但是,如果我的书签没有在某些网站上损坏,我也会非常喜欢它。

那么,有没有一种方法可以修复我拥有的正则表达式,使其不会被视为评论,或者你能建议一个可以用不同的语法或其他东西完成相同工作的方法吗?(如果从我的问题中看不出来,我对正则表达式的工作原理最了解,并且通过从其他 Stack Overflow 问题/答案中复制它们来获得我在本示例中使用的那些)

4

2 回答 2

2

使用长版本:

var regex = new RegExp("\\S+\\s*", "g");
$("body *").replaceText(regex, spanWrap);

(编辑:转义字符串中的反斜杠)

于 2013-02-18T14:52:40.727 回答
0

那么,有没有一种方法可以修复我拥有的正则表达式,使其不会被视为评论

我想不出任何理智的事情。(您可以通过使用RegExp构造函数并将正则表达式分成两个字符串,然后将它们连接在一起以形成正则表达式来获得效果。不过,我不会认为那是理智的。)

我会使用一系列行注释//而不是块注释。

于 2013-02-18T14:50:13.503 回答