用于在javascript中包含字边界上的span标记中的每个单词的正则表达式

时间:2013-01-03 15:44:07

标签: javascript regex

我想在<span>标记中包装字符串的每个单词,而不会破坏任何现有的html标记,也不包含任何标点符号。

例如以下字符串:

This... is, an. example! <em>string</em>?!

应包装为:

<span>This</span>... <span>is</span>, <span>an</span>. <span>example</span>! 
<span><em>string</em></span>?!

理想情况下,我只需要包装单词而不是其他内容。

除了撇号外,它们也应该被包裹。

it's =&gt; <span>it's</span>

give 'em =&gt; <span>give</span> <span>'em</span>

teachers' =&gt; <span>teachers'</span>

现在我使用一个非常简单的正则表达式:

str.replace(/([^\s<>]+)(?:(?=\s)|$)/g, '<span>$1</span>');

我在stackoverflow上找到它。但是它只包含在空格上的所有单词并且也包装了标点符号,这在我的情况下是不可取的。

我知道我应该因为在正则表达中如此糟糕而感到羞耻。

有人可以帮帮我吗?

非常感谢!

2 个答案:

答案 0 :(得分:3)

试试这个正则表达式:

var str = "This string... it's, an. example! <em>string</em>?!";
str.replace(/([A-z0-9'<>/]+)/g, '<span>$1</span>');

// "<span>This</span> <span>string</span>... <span>it's</span>, <span>an</span>. <span>example</span>! <span><em>string</em></span>?!"

答案 1 :(得分:1)

我到处玩耍,并使它起作用:

String toMarkUp = "Each word needs a strong tag around it.  I really want to wrap each and every word";

String markedUp = toMarkUp.replaceAll("\\b(\\w+)\\b","<span>$1</span>");

正则表达式将捕获每个具有一个或多个字符(\ w +)且被单词边界包围的单词,并使用正向查找组在替换中引用$ 1,其中1是正则表达式中的第一个捕获组。 >

输出:

<span>Each</span> <span>word</span> <span>needs</span> <span>a</span> <span>strong</span> <span>tag</span> <span>around</span> <span>it</span>.  <span>I</span> <span>really</span> <span>want</span> <span>to</span> <span>emphasize</span> <span>each</span> <span>and</span> <span>every</span> <span>word</span>