我需要用 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] 中是相同的字符串会发生什么?
因为它应该只替换第二个括号区域中的值。
最佳答案
您可以使用正则表达式来匹配第一个 [....]
和 [
并将该部分捕获到一个组中(您将能够通过反向引用引用),然后匹配除 ]
之外的 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);
/(\[[^\]]*]\[)[^\]]*/
没有 g
修饰符,它将寻找 < em>一个只匹配。
由于正则表达式引擎从左到右搜索字符串以进行匹配,因此您会从左侧获得第一个匹配项。
\[[^\]]*]\[
匹配 [
,然后 除 之外的任何
0+ 个字符] 然后是 ][
。 (...)
形成一个捕获组 #1,它会记住您将能够使用 $1
反向引用进入替换的值。 [^\]]*
匹配除 ]
之外的 0+ 个字符,这将被替换。
详细信息:
(
- capturing group 开始\[
- 文字[
符号(如果未转义,它开始 character class )[^\]]*
- negated character class匹配零个或多个(由于*
quantifier )]
- 文字]
(在字符类之外,不必转义)\[
- 文字[
)
- 捕获组 #1 结束(其值可以通过替换模式中的$1
backreference 访问)[^\]]*
- 0+(因为*
量词匹配零次或多次出现,如果需要,请替换为+
仅匹配出现 1 次或多次的字符)]
以外的字符(在 JS 正则表达式的字符类中,]
必须在任何位置转义)。
关于javascript - 如何使用正则表达式替换字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43675689/