用JavaScript替换字符之间的所有内容

时间:2014-04-21 14:30:46

标签: javascript jquery regex

我正在尝试制作一个简单的降价转换器,以便在JS和Regex上做得更好。

我现在需要找到两个星号之间的所有内容,并将它们包装在<i>标签中:

JSFIDDLE

var html = '*abc is a string*';

var html = html.replace(/\*/g , '<i>');

console.log(html);

结果:

<i>abc is a string<i>

我也看到了相关问题的答案,但我不确定如何相应地调整我的代码,或者它实际上做了什么:

(?s)<h1>.+</h1>

任何帮助都会很棒。

4 个答案:

答案 0 :(得分:1)

您可以使用capture group来获取应包含在HTML标记中的内容:

var html = html.replace(/\*([^*]+)\*/g , '<i>$1</i>');

([^*]+)的解释:

(        # start of capture group
  [^     # start of negated character class (match any character not listed)
    *    # literal asterisk character
  ]      # end of negated character class
  +      # match at least one of the previous token
)        # end of capture group

所以[^*]+表示“匹配至少一个不是*的字符”。这样可以使到下一个*的所有字符都匹配。

答案 1 :(得分:0)

您可以使用正则表达式[^*]+

'*abc is a string*'.match(/[^*]+/gi);  //["abc is a string"]

答案 2 :(得分:0)

您可以匹配部分字符串,然后在https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Example.3A_Using_a_regular_expression_to_change_data_format

中记录的替换调用中使用该字符串

示例:

'*abc is a string*'.replace(/\*([\w\s]+)\*/g, '<i>$1</i>')
> '<i>abc is a string</i>'

答案 3 :(得分:0)

或者在你的正则表达式中使用调整后的贪婪(下面我的模式中为+?),尽管效率较低(参见http://blog.stevenlevithan.com/archives/greedy-lazy-performance)。接下来尝试使用回调:

var result = source.replace( /(*|_)(.+?)(\1)/g, function( all, starter, content, ender ) {
    return "<i>" + content + "</i>";
} );

使用回调可能会提高代码的灵活性:

var result = source.replace( /(*|_)(.+?)(\1)/g, function( all, starter, content, ender ) {
    switch ( starter ) {
        case '*' :
            return "<strong>" + content + "</strong>";
        case '_' :
            return "<em>" + content + "</em>";
    }
} );