用JavaScript替换字符之间的所有内容
我正在尝试制作一个简单的降价转换器,以便更好地使用JS和正则表达式 我现在需要找到两个星号之间的所有内容,并将它们包装在用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(
标记中:
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>";
}
} );