美文网首页
js中replace()方法如何匹配最后一个符合条件的字符并替换

js中replace()方法如何匹配最后一个符合条件的字符并替换

作者: _信仰zmh | 来源:发表于2021-03-18 16:33 被阅读0次

想显示的样式:

  • 前缀_div框_后缀

前缀值data:

  businessPrefixE:'inc_',//前缀
  suffixE:'_flag'//后缀

ant-design-vue中设置a-input的前缀和后缀,因为ant-design中的a-input前缀参数不能自动追加_来拼接,那我们就传值的时候自己加_。

                   <a-form-item
                      label="英文名"
                      :label-col="formItemLayout.labelCol"
                      :wrapper-col="formItemLayout.wrapperCol"
                    >
                      <a-input  
                      :addon-before="businessPrefixE"
                      :addon-after="suffixE"
                      class="testinput"
                      @change="changeEname"
                      v-decorator="[
                      'ename',
                      {rules: [{required: true,message: '请输入英文名!'}]}]"/>
                    </a-form-item> 

自定义词根校验组件设置前缀后缀:自定义组件我开发的时候只考虑了传入前缀,组件内部如果传入了前缀就自动给它拼个_来连接,这里是与a-input的差别所在。

因为两者公用的一个前缀,那么传到自定义组件内部的前缀值就需要在传入之前把最后一个_去掉,否则就会显示成了'前缀__',显示成了两个下划线。

  • 使用replace替换,会把第一个给替换掉,如果前缀只有一个就没问题
:rootPre='businessPrefixE.replace("_","")' 
// 例如: inc_ ==> inc
  • 但如果包含了多个下划线,就会显示错误
//例如:            inc_accept_ ==> incaccept_
//实际想要的应该是:inc_accept_ ==> inc_accept

解决1:replace使用正则,把最后一个匹配到的_给替换为空

:rootPre='businessPrefixE.replace(/(.*)_/,"$1")'
  • 说明:
    参数1:正则表达式,要匹配什么字符,/(.*)+这里写要匹配的字符/,代表最后一个匹配到的字符。注:如果参数1是个普通字符串,那它就取到的是第一个匹配到的字符。
    参数2:要替换成什么字符,"$1+要替换成什么字符",如果要替换成空(去掉的意思,不是替换成空格)就写成"$1"什么也不用加。如果写成"$1 ",就会替换成一个空格。
                 <div class="ant-row ant-form-item">
                      <div class="ant-col  ant-form-item-label" :class="formItemLayout.labelCol?'ant-col-'+formItemLayout.labelCol.span:''">
                          <label for="ename" title="英文名" class="ant-form-item-required">英文名</label>
                      </div>
                      <div class="ant-col ant-form-item-control-wrapper" :class="formItemLayout.wrapperCol?'ant-col-'+formItemLayout.wrapperCol.span:''">
                          <div class="ant-form-item-control">
                            <!-- :rootPre='businessPrefixE.replace("_","")' -->
                              <SimpleLabelHelper ref="labelHelper" 
                                  :isGlobal='isGlobal'
                                  :globalNewRoots='globalNewRoots'
                                  :rootPre='businessPrefixE.replace(/(.*)_/,"$1")'
                                  :rootAft='suffixE.replace("_","")'
                                  :text="ename" 
                                  :dataFieldId="valueData.dataFieldId" 
                                  :allLabelRoots='allLabelRoots'
                                  @callback='getInnerCall'
                                  @refresh='refresh'>
                              </SimpleLabelHelper>
                          </div>
                      </div>
                    </div>

解决2:就是字符串截取,去掉最后一位

let pre = 'inc_accept_';
let pre2 = pre.slice(0, pre.length-1);

最好判断下最后一位是_才截取

let pre3 = pre.slice(pre.length-1)=='_'?pre.slice(0, pre.length-1):pre;

相关文章

网友评论

      本文标题:js中replace()方法如何匹配最后一个符合条件的字符并替换

      本文链接:https://www.haomeiwen.com/subject/ylfpcltx.html