【问题标题】:Regular Expression matching either a single special character OR a particular sequence正则表达式匹配单个特殊字符或特定序列
【发布时间】:2009-06-20 22:54:08
【问题描述】:

不确定我这样做是否正确:

/(https?:\/\/\S+)(\s|(& nbsp;))?/g;

这应该匹配以 http(s):// 开头并以空格字符或 & nbsp; 结尾的 URL

所以问题出在这部分:

(\s|(& nbsp;))?

这应该意味着:匹配一个空格或一个  但它不起作用。它从不匹配一个  并继续直到找到一个空白。

我不是在寻找任何其他 http 正则表达式,我不是在寻找 javascript 库解决方案,我对此很满意,我只是想弄清楚最后一部分。

编辑:本站代码格式存在某种错误,& 和 nbsp; 之间没有空格。但是如果我去掉那个分隔空间,这个网站会把它变成一个空间。

【问题讨论】:

  • 尝试使用   来获得正确的格式。问题是  是用于不间断空格的有效 HTML 代码,markdown 允许插入 HTML。
  • @workmad3:  用纯文本做伎俩。与号后跟“nbsp;” in backticks 将呈现所需的序列,但我无法弄清楚如何在预格式化的块中执行它。

标签: javascript regex


【解决方案1】:

\S+ 位是贪心的,它将匹配尽可能多的非空格字符,包括任何可能存在的 。把它改成不贪婪的\S+?,你可能会有更好的运气:

/(https?:\/\/\S+?)(\s| |$)/g;

(更新是因为我忽略了尾随的?。)

【讨论】:

  • 不,现在只匹配第一个非单词字符。
  • 我的意思是非空白字符,所以它匹配 http://w 而不是 http://www.cnn.com 例如
  • @apphacker,好的,这是有道理的。我忽略了尾随的问号。我想你把它放在那里是因为你偶然想在字符串的末尾匹配这些 URL?最简单的方法是匹配 whitspace 或  或字符串的结尾。
猜你喜欢
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 2015-01-15
相关资源
最近更新 更多