Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用JavaScript替换字符之间的所有内容_Javascript_Jquery_Regex - Fatal编程技术网

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

用JavaScript替换字符之间的所有内容,javascript,jquery,regex,Javascript,Jquery,Regex,我正在尝试制作一个简单的降价转换器,以便更好地使用JS和正则表达式 我现在需要找到两个星号之间的所有内容,并将它们包装在标记中: var html='*abc是一个字符串*'; var html=html.replace(/\*/g',); log(html); 结果: abc是一个字符串 我也看到了一个相关问题的答案,但我不确定如何相应地调整我的代码,或者它实际上做了什么: (?s)。+ 任何帮助都很好。您可以使用regexp[^*]+ '*abc is a string*'.match(

我正在尝试制作一个简单的降价转换器,以便更好地使用JS和正则表达式

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

var html='*abc是一个字符串*';
var html=html.replace(/\*/g',);
log(html);
结果:

abc是一个字符串

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

(?s)。+


任何帮助都很好。

您可以使用regexp
[^*]+

'*abc is a string*'.match(/[^*]+/gi);  //["abc is a string"]
您可以使用获取应包装在HTML标记中的内容:

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

所以
[^*]+
表示“至少匹配一个非
*
字符”。这会使下一个
*
之前的所有字符都匹配。

您可以匹配字符串的一部分,然后在替换调用中使用该字符串,如中所述

例如:

'*abc is a string*'.replace(/\*([\w\s]+)\*/g, '<i>$1</i>')
> '<i>abc is a string</i>'
“*abc是一个字符串*”。替换(/\*([\w\s]+)\*/g,“$1”)
>“abc是一个字符串”

或者在您的regexp中使用调整后的greediness(
+?
,在我下面的模式中),尽管它的性能较差(请参阅)。下次尝试使用回调:

var result = source.replace( /(*|_)(.+?)(\1)/g, function( all, starter, content, ender ) {
    return "<i>" + content + "</i>";
} );
var result=source.replace(/(*||))(.+?)(\1)/g,函数(全部,起始,内容,结束){
返回“+内容+”;
} );
使用回调可能会提高代码的灵活性:

var result = source.replace( /(*|_)(.+?)(\1)/g, function( all, starter, content, ender ) {
    switch ( starter ) {
        case '*' :
            return "<strong>" + content + "</strong>";
        case '_' :
            return "<em>" + content + "</em>";
    }
} );
var result=source.replace(/(*||))(.+?)(\1)/g,函数(全部,起始,内容,结束){
开关(起动器){
案例“*”:
返回“”+内容+””;
案例‘‘
返回“+内容+”;
}
} );

您的问题是什么?我看不出你有什么问题。用
标记替换它们。您不需要在字符类中转义*谢谢。我一直在看
([^*]+)
-你能详细说明这部分的作用吗?你也可以使用
+?
来匹配所有内容直到下一个
*
,使这个内部部分更灵活。@cepharum:当然,但我喜欢避免使用懒惰的量词。为什么会更灵活?@Felix Kling:。。。对于
,?
不关心字符本身的边界,而是依赖于在字符前后定义边界。它与这些定义没有紧密的联系。
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>";
    }
} );