我有正则表达式文本替换搜索/\*\[(.*?)\]\*/ig
模式并将其替换为'<span style="font-size: 14px;">$1</span>'
。这适用于简单的javascript 替换功能。
text = text.replace(/\*\[(.*?)\]\*/ig, '<span style="font-size: 14px;">$1</span>');
但是,我想知道模式是否在句子内,并相应地设置字体大小。
情景句1:
This is a text with the *[pattern]* inside the sentence.
此处*[pattern]*
应替换为'<span style="font-size: 14px;">$1</span>'
。请注意,字体大小为14px,因为模式位于句子内。以下情况也是如此:
*[pattern]* in the beginning.
或
End with a *[pattern]*
然而,在以下场景中模式不在句子中,我希望字体大小更大,让我们说30px。这适用于以下情况:
*[pattern]*
或
Text and then the pattern in the new line
*[pattern]*
或
*[pattern]*
这里第3个用空格表示,但没有其他词。
基本上,如果模式与句子隔离,我希望它具有更大的字体大小。有什么建议吗?
答案 0 :(得分:4)
您可以使用这样的前瞻:
/\*\[(.*?)\]\*(?=[^.\n]*\.)/g
用于“内部”句子的模式。同样,
/\*\[(.*?)\]\*(?=[^.\n]*(\n|$))/g
表示“外部”。
答案 1 :(得分:0)
使用单个正则表达式可以轻松实现此目的。我们将使用捕获组。
不要让长度吓到你:这只是模式,被两个(?:non-capturing groups)
包围
^(?:([ \t]*?)|([^\r\n]*?))\*\[[^\]]*\]\*(?:([ \t]*?)|([^\r\n]*?))$
*[pattern]*
之前的部分,当它包含的不仅仅是空格或制表符时。*[pattern]*
之后的部分,当它包含的不仅仅是空格或制表符时。在此demo for the regex中,查看右下方窗格中的捕获组。
如何使用?
在替换lambda中,只测试第1组和第2组的长度。如果它大于零,则进行一种替换。否则,做另一个。
我不会为你编写代码,但这里有替换lambda的样子:
replaced = subject.replace(regex, function(m, group1, group2) {
if ( group1 or group2 meet some magic code... ) return some span around m;
else return some other span around m;;
});