美文网首页
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