2013-02-18 201 views
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 - 作品很多,比另一个,它不会标点符号更好和白色空间。但是,如果我的小书签在某些网站上没有中断,我也很喜欢它。

那么,有没有任何办法解决的正则表达式,我有那么它没有被读作评论,或者你可以建议一个可以与不同的语法什么的,也许做同样的工作吗? (如果它不是来自我的问题很明显,我有多么的正则表达式的工作,并通过复制他们从其他堆栈溢出的问题/解答得到了我使用的是在这个例子中,那些最起码的理解)

+0

我怀疑任何JavaScript引擎解释这个序列作为注释的结束。那真的很奇怪。 – 2013-02-18 14:46:05

+0

什么是'spanWrap'? – Anirudha 2013-02-18 14:46:48

+0

@FelixKling - 我会感到惊讶,如果任何没有:http://jsbin.com/ocomuy/1/ – Quentin 2013-02-18 14:47:17

回答

2

使用长版本:

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

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

+0

这种方法看起来非常聪明,当我看到它时,我在前额上打了一下,但是我试了一下,在简短版本打破的页面上运行,它的功能不同(即短版本在span标签中包装单词(包括标点符号和周围空白),而这只对少数几个单词这样做) – JJohnson 2013-02-18 15:17:23

+0

这里是一个稍微更清晰的上述评论版本:这种方法看起来非常聪明,当我看到它时,我在前额上打了一下自己,但我尝试了这一点,当它在短版本的网页上运行时,它的功能并不一样(即短版本触发了我的功能,可以将每个单词(包括标点符号和周围的空格)包裹在span标签中,而这仅仅是为了一些工作ds在页面上并且保持最大的不变) – JJohnson 2013-02-18 15:23:09

+0

@JJohnson:这看起来很奇怪。我会试着弄清楚为什么会发生这种情况(它不应该......)。与此同时,您可以使用此页面来测试正则表达式:http://regexpal.com/ – marsze 2013-02-19 07:47:21

0

所以,有没有一种方法来修复我有正则表达式,以便它不被阅读为一个评论

我想不出任何理智。 (您可以通过使用RegExp构造,打破正则表达式分成两个字符串,然后拼接他们重新走到一起的正则表达式得到的效果,我不会,虽然称之为理智。)

我会使用一系列在线评论//而不是块评论。