首页 文章

正则表达式检查单词是在句子中还是在外面

提问于
浏览
0

我有正则表达式文本替换搜索 /\*\[(.*?)\]\*/ig 模式并将其替换为 '<span style="font-size: 14px;">$1</span>' . 这适用于简单的javascript replace 函数 .

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]*

但是在以下情况下, patterns 不是't in sentences, I want the font size to be bigger, let' s表示30px . 这适用于以下情况:

*[pattern]*

要么

Text and then the pattern in the new line
*[pattern]*

要么

*[pattern]*

这里第3个用空格表示但没有其他字 .

基本上,如果模式与句子隔离,我希望它具有更大的字体大小 . 有什么建议?

2 回答

  • 0

    您可以使用这样的前瞻:

    /\*\[(.*?)\]\*(?=[^.\n]*\.)/g
    

    对于“内部”句子的模式 . 同样的,

    /\*\[(.*?)\]\*(?=[^.\n]*(\n|$))/g
    

    对于“外部”的 .

    http://jsfiddle.net/RCD83/

  • 4

    使用单个正则表达式可以轻松实现此目的 . 我们将使用捕获组 .

    不要让长度吓到你:这只是模式,周围有两个 (?:non-capturing groups)

    ^(?:([ \t]*?)|([^\r\n]*?))\*\[[^\]]*\]\*(?:([ \t]*?)|([^\r\n]*?))$
    
    • 捕获组1是 *[pattern]* 之前的部分,当它包含的不仅仅是空格或制表符时 .

    • 捕获组2是 *[pattern]* 之后的部分,当它包含的不仅仅是空格或制表符时 .

    在此demo for the regex中,查看右下方窗格中的捕获组 .

    How to use it?

    在替换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;;
    });
    

相关问题