【问题标题】:Javascript regex: remove space(s) if not surrounded by a letterJavascript正则表达式:如果没有被字母包围,则删除空格
【发布时间】:2012-09-09 09:33:38
【问题描述】:

我正在尝试使用 javascript 清理一些 html 文本,在某些单词之前和之后包含空格(文本格式不正确)。

目前我有这个正则表达式:

$("#" + target + " *").replaceText(/([\S][\u05B0-\u05C4]*)/gi, '<span class="marked">$1<\/span>');

这将捕获所有非空白字符并将它们包装在 span 元素中,但不会捕获单词之间的空格(我需要 span)。

你会怎么解决这个问题?

【问题讨论】:

  • 是否有意使用\S(全是非空白)?你能举例说明输入和期望的输出吗?
  • $.fn.replaceText 来自哪里?
  • 有点不清楚。您能提供所需输出的示例吗?
  • 是的,请提供文本输入和输出的示例。
  • \S 是我尝试捕获所有非空白字符的尝试,它有效,但我丢失了单词之间的空格。忘了提:replaceText 来自benalman.com/projects/jquery-replacetext-plugin 输入是嵌套在表格元素(td)中的文本,每个嵌套元素都包含空格(缩进),实际文本的格式也很差(一些行后有很多空格) .当我使用该函数时,它将所有这些空格包装在跨度内(缩进空格和文本的前导/尾随空格)。我想要的只是单词之间的文本和空格。

标签: javascript html regex


【解决方案1】:

这将匹配多个重复的(空格),并将它们替换为单个空格:

'Quick   Brown      Fox'.replace(/[ ]+/g, ' '); //returns 'Quick Brown Fox'

这将匹配多个重复的\n\r\t(空白符号 - 空格、制表符、换行符和换行符)并将它们替换为单个空格:

'Quick     Brown    Fox'.replace(/\s+/g, ' ');  //returns 'Quick Brown Fox'

Fiddled

我不明白您对使用 span 环绕实现的目标的解释,但您可以使用上面的输出做任何您想做的事情。

【讨论】:

  • 为什么你有/[ ]+/g而不是/ +/g
  • @some: 如果第二个示例中的\s 匹配范围太广; OP 将能够添加其他字符引用以匹配到第一个模式(例如/[ \t]+/g)而不会破坏它(/ \t+/g 会发生)。这意味着 set 字符正在被替换,恰好它仅由一个字符组成。不过你是对的,特别是在第一个示例中,不需要将单个字符括在括号中。
猜你喜欢
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多