我需要替换 Javascript 中字符串的一部分
下面的例子应该可以澄清我的意思
var str = "asd[595442/A][30327][0]";
var strToReplace = "30333";
var strDesiredResult = "asd[595442/A][30333][0]";
基本上这意味着括号内的第二个区域应该替换为另一个字符串
怎么做?
到目前为止我所做的是这样的:
var str = "asd[595442/A][30327][0]";
var regex = /asd\[(.*)\]\[(.*)\]\[(.*)\]/;
var arrMatches = regex.exec(str);
该字符串正确显示在 arrMatches[2] 中,我可以替换它。但是如果 arrMatches[1] 中是相同的字符串会发生什么?
因为它应该只替换第二个括号区域中的值。
您可以使用与第一个匹配的正则表达式[....]
随后是[
并将该部分捕获到一个组中(您将能够通过反向引用来引用该组),然后匹配除]
用您的替代品替换它们:
var str = "asd[595442/A][30327][0]";
var strToReplace = "30333";
console.log(str.replace(/(\[[^\]]*]\[)[^\]]*/, "$1" + strToReplace));
var strDesiredResult = "asd[595442/A][30333][0]";
console.log(strDesiredResult);
The /(\[[^\]]*]\[)[^\]]*/
has no g
修饰符,它将寻找one仅匹配。
由于正则表达式引擎从左到右搜索字符串中的匹配项,因此您将获得左侧的第一个匹配项。
The \[[^\]]*]\[
火柴[
, then any0+ 个字符以外的字符]
进而][
. The (...)
形成一个捕获组#1,它会记住您能够进入替换的值$1
反向引用。[^\]]*
匹配 0+ 个字符,除了]
这将被替换。
Details:
-
(
- a capturing group http://www.regular-expressions.info/brackets.html start
-
\[
- 字面意思[
符号(如果未转义,它会启动字符类 http://www.regular-expressions.info/charclass.html)
-
[^\]]*
- a 否定字符类 http://www.regular-expressions.info/charclass.html#negated匹配零个或多个(由于*
量词 http://www.regular-expressions.info/repeat.html)
-
]
- 字面意思]
(在字符类之外,不必转义)
-
\[
- 字面意思[
-
)
- 捕获组 #1 结束(可以通过以下方式访问其值$1
反向引用 http://www.regular-expressions.info/replacebackref.html从替换模式)
-
[^\]]*
- 0+(作为*
量词匹配零次或多次出现,替换为+
如果您只需要匹配出现 1 次或多次的地方)除]
(在 JS 正则表达式的字符类中,]
必须在任何位置转义)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)