我正在使用一个bookmarklet,它使用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问题/答案中复制它们来获得我在本例中使用的表达式)
答案 0 :(得分:2)
使用长版:
var regex = new RegExp("\\S+\\s*", "g");
$("body *").replaceText(regex, spanWrap);
(编辑:转义字符串中的反斜杠)
答案 1 :(得分:0)
那么,是否有一种方法来修复我所拥有的正则表达式,以便它不被读作注释
我想不出任何理智。 (你可以通过使用RegExp
构造函数并将正则表达式分解为两个字符串,然后将它们连接在一起以获得正则表达式来获得效果。但我不会称之为理智。)
我会使用一系列的行评论//
而不是块评论。