Javascript 用正则表达式将多个字符替换为一个字符
我有这个字符串:Javascript 用正则表达式将多个字符替换为一个字符,javascript,string,Javascript,String,我有这个字符串: var str = '#this #is____#a test###__' 我想用(#)替换所有字符(#,z),因此例外输出为: '#this #is#a test#' 注: 我不知道字符串中有多少个(#)或(#)序列 我尝试的是: 我试着写: var str = '#this #is__ __#a test###__' str = str.replace(/[#_]/g,'#') alert(str) 但结果是: #this #is## ###a test#####
var str = '#this #is____#a test###__'
我想用(#)替换所有字符(#,z),因此例外输出为:
'#this #is#a test#'
注:
我不知道字符串中有多少个(#)或(#)序列
我尝试的是:
我试着写:
var str = '#this #is__ __#a test###__'
str = str.replace(/[#_]/g,'#')
alert(str)
但结果是:
#this #is## ###a test#####
我尝试将(*)用于序列,但不起作用:
var str = '#this #is__ __#a test###__'
str = str.replace(/[#_]*/g,'#')
alert(str)
那么我如何才能获得我的例外输出呢?您的正则表达式将任何匹配字符的单个实例替换为您指定的字符,即
。您需要添加修饰符+
,告诉它应该替换任意数量的连续匹配字符(,#),而不是单独替换每个字符<代码>+修饰符表示一次匹配一个或多个指定图案。您可以从本页阅读有关修改器的更多信息:
var str='#这是一个测试######;
var formattedStr=str.replace(/[###,]+/g,'.#');
console.log(formattedStr)代码>编写良好的正则表达式可以相当容易地处理您的问题。
引用Mohit的答案,有一个起点:
var str = '#this #is__ __#a test###__';
var formattedStr = str.replace(/[#_,]+/g, '#');
console.log( formattedStr );
第2行:
在formattedStr中输入str上替换方法的结果。
替换是如何工作的?第一个参数是字符串或正则表达式。
注意:Javascripts中的RegExp是RegExp类型的对象,而不是字符串。这么写
/yourRegex/
或
是等价的语法。
现在让我们来讨论这个特殊的正则表达式本身。
前导和尾随斜杠用于环绕图案,结尾的g表示“全局”-第一次匹配后不要停止。
方括号描述了可以提供的一组字符以匹配模式,而+号表示“该组中的一个或多个字符”。
基本上,################会匹配,但也会匹配,因为#和#属于同一组。
通过使用(#|))+
给出首选行为
这意味着“#或",一旦找到一个,继续期待更多或选择的模式”。
所以uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
另一个问题是不知道如何用a或a替换找到的模式。
幸运的是,使用括号可以让我们使用一种叫做捕获组的东西。基本上,您可以存储在临时变量中找到的任何模式,这些模式可以在替换模式中使用。
调用它们很容易,将$置于匹配(模式)的位置。
/(foo)textnotgetting(bar)captured(baz)/例如,通过以下方式填充捕获组“变量”:
$1 = foo
$2 = bar
$3 = baz
在我们的例子中,我们只想用第一次出现的字符替换1+字符,括号中不包括+符号
所以我们可以简单地
str.replace("/(#|_)+/g", "$1");
为了让它工作。
祝你今天愉快 您应该使用+
匹配上一组的一个或多个匹配项
var str='#这是一个测试####
str=str.replace(/[###]+/g,'.#')
警报(str)
您在正则表达式中缺少+
+
表示1个或多个字符,因此它将捕获多个字符,而不仅仅是1个字符。replace(/[\u]+/g,”)。replace(/[\u35;]{2,}/g,”)
它可以像您所说的那样工作@Rajesh先生,谢谢您的解释。请记住,你是在回答读者的问题,而不仅仅是OpThank@Rajesh,我已经添加了一些解释。
str.replace("/(#|_)+/g", "$1");