我想在<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上找到它。但是它只包含在空格上的所有单词并且也包装了标点符号,这在我的情况下是不可取的。
我知道我应该因为在正则表达中如此糟糕而感到羞耻。
有人可以帮帮我吗?
非常感谢!
答案 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>