繁体   English   中英

仅当它之前有数值时才替换的正则表达式

[英]Regular expression to replace only if it has numeric value before

我想写一个正则表达式来用下划线_替换xX值,前提是xX被数字包围,或者前面或后面有数字。

例如:

OFE_PALLET_120X92 will be OFE_PALLET_120_92
OFX_PALLET_120X92 will be OFX_PALLET_120_92

这是我的初始代码:

sRegExInput = new RegExp('[xX]', 'g');
result =    result.replace(sRegExInput ,'_');

如何实现?

您可以使用以下正则表达式:

"OFX_PALLET_120X92".replace(/(\d)x/ig, "$1_")
// "OFX_PALLET_120_92"

本质上,它找到一个数字,捕获它,然后找到一个X ,并将它替换为捕获的数字 ( $1 ) 和一个下划线。

使用提供的正则表达式,我将模式匹配为:

  1. 查找一位或多位数字,
  2. 后接xX
  3. 后跟一位或多位数字。

然后在替换语句中,我使用$1替换第一组找到的数字,使用$3替换最后一组找到的数字。

entries变量中的map只是为了简化代码。 这与正则表达式无关。

 var entries = [ 'OFE_PALLET_120X92', 'OFX_PALLET_120X92' ]; var result = entries.map( function(entry) { return entry.replace(/(\d+)([xX])(\d+)/g,'$1_$3'); } ); console.log(result);

运行代码片段来测试 output:)

在构造函数中使用\\d

 var result = 'OFE_PALLET_120X92 will be OFE_PALLET_120_92'; var sRegExInput = new RegExp('(\\d)x', 'gi'); result = result.replace(sRegExInput,'$1_'); console.log(result);

解释

--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    \d                       digits (0-9)
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  x                        'x' or 'X' due to i flag

$1指的是捕获的 substring。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM