Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何保持*/&引用;在正则表达式中不被解释为块注释?_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 如何保持*/&引用;在正则表达式中不被解释为块注释?

Javascript 如何保持*/&引用;在正则表达式中不被解释为块注释?,javascript,jquery,regex,Javascript,Jquery,Regex,我正在开发一个bookmarklet,它使用插件将页面上的所有单词(以及多余的空格/标点符号)封装在span标记中。该插件遍历页面上的所有文本节点,并允许我调用一个函数来操作每个节点的内容,而不会破坏页面上的任何其他HTML格式。(我敢肯定,这一切都不是问题,但我觉得上下文可能有用)。我对函数的调用如下所示,供您参考: $("body *").replaceText(/\S+\s*/g, spanWrap); 问题是,我找到的用于分隔这些单词的最佳正则表达式--/\S+\S*/g--包含块注释

我正在开发一个bookmarklet,它使用插件将页面上的所有单词(以及多余的空格/标点符号)封装在span标记中。该插件遍历页面上的所有文本节点,并允许我调用一个函数来操作每个节点的内容,而不会破坏页面上的任何其他HTML格式。(我敢肯定,这一切都不是问题,但我觉得上下文可能有用)。我对函数的调用如下所示,供您参考:

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

当我运行bookmarklet时,大多数网站似乎都没有这个问题,bookmarklet可以正常工作。然而,由于我无法预测的原因,一些网站抛出了一个“
uncaughtsyntaxerror:Unexpected token”
那么,有没有一种方法可以修复我使用的正则表达式,使其不被当作注释来读取

我想不出任何合理的方法(你可以通过使用
RegExp
构造函数,将正则表达式分解成两个字符串,然后将它们连接在一起,得到合理的效果。不过我不认为这是合理的。)

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

使用长版本:

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

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

我怀疑是否有任何JavaScript引擎将此序列解释为注释的结尾。这将非常非常奇怪。@FelixKling-如果没有,我会感到惊讶:@Quentin:好的,如果它在其中,当然。但不是它本身。编辑:显然我没有正确阅读问题。不过,由于这是一个书签,我怀疑错误是否存在与潜在的块注释有关。如果你想让我们提出替代方案,请告诉我们正则表达式应该做什么。是什么阻止了它在页面上的脚本标记中插入跨距?这很容易用内联脚本破坏页面。这种方法看起来非常聪明,当我看到它时,我有点打了自己的额头,但我虽然它在短版本中断的页面上运行,但功能不同(即短版本在span标记中包装单词(包括标点符号和周围的空格),而这只是对少数单词进行包装)这是上述评论的一个更清晰的版本:这种方法看起来非常聪明,当我看到它时,我有点打了自己的额头,但我尝试了一下,虽然它在短版本中断的页面上运行,但它的功能并不相同(即短版本触发我的功能来包装每个单词)(包括标点符号和周围的空白),而这只是对页面上的一些单词进行了处理,并保留了大部分未被触及的内容)@JJohnson:这似乎很奇怪。我会尝试找出为什么会发生这种情况(不应该…)同时,您可以使用此页面测试正则表达式:@JJohnson:请参见我答案中的编辑,您必须转义字符串中的反斜杠-但我猜您是这样做的,否则它根本不起作用。另外:您记得添加“g”吗“作为RegExp构造函数中的第二个参数?从您描述的行为来看,您似乎忽略了这一点。是的,我自己通过一些阅读和尝试错误找到了逃逸的方法,但如果没有您的第一次尝试,我是不会到达那里的。结果是,导致我提出问题的行为的原因是(当然)另外,我还是很高兴找到了一种新的/更好的方法来做这件事,并且对regex有了更多的了解。谢谢你的帮助!