我需要在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]中是相同的字符串,会发生什么?
因为它应该只替换第二个括号区域中的值。
4条答案
按热度按时间jm2pwxwz1#
你可以使用一个正则表达式,它将匹配第一个
[....]
,然后是[
,并将该部分捕获到一个组中(你可以通过反向引用来引用),然后匹配除]
之外的1+个字符,以替换它们:字符串
/(\[[^\]]*]\[)[^\]]*/
没有g
修饰符,它只会查找 one 匹配。由于正则表达式引擎从左到右搜索字符串的匹配项,因此您将从左侧获得第一个匹配项。
\[[^\]]*]\[
匹配[
,然后匹配 any 0+除]
以外的字符,然后匹配][
。(...)
形成了一个捕获组#1,它会记住你可以用$1
反向引用替换的值。[^\]]*
匹配]
以外的0+个字符,这将被替换。详情:
(
- a capturing group启动\[
-文字[
符号(如果未转义,则开始character class)[^\]]*
-匹配零或更多的否定字符类(由于*
quantifier)]
-文字]
(在字符类之外,它不必转义)\[
-文字[
)
-捕获组#1的结束(其值可以通过替换模式中的$1
backreference访问)[^\]]*
- 0+(因为*
量词匹配零次或多次出现,如果您只需要匹配出现1次或多次出现的地方,则替换为+
)除]
之外的字符(在JS正则表达式中的字符类中,]
必须在任何位置转义)。pxy2qtax2#
使用此模式:
字符串
测试here
型
wmvff8tz3#
有很多方法可以做到这一点。一种可能的模式是
字符串
可以看到
$<number>
引用了从正则表达式捕获的字符串(括号中的字符串组)。我们可以参考这些,并重新安排它,无论我们想要的。44u64gxh4#
你可以像下面这样使用正则表达式
/\[[0-9]+\]/
。字符串