javascript - 如何使用正则表达式替换字符串的一部分

标签 javascript regex

我需要用 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 开始
  • ) - 捕获组 #1 结束(其值可以通过替换模式中的 $1 backreference 访问)
  • [^\]]* - 0+(因为 * 量词匹配零次或多次出现,如果需要,请替换为 +仅匹配出现 1 次或多次的字符)] 以外的字符(在 JS 正则表达式的字符类中,] 必须在任何位置转义)。

关于javascript - 如何使用正则表达式替换字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43675689/

相关文章:

javascript - 如何在第一次按下按钮时显示消息?

javascript - 使用 javascript 在客户端格式化推文?

javascript - 如何组合两个独立 Uint8Array 的颜色数据 (JPEG) 和透明度数据 (PNG)?

javascript - 正则表达式选择两个字符串之间的所有内容,但不选择其中一个字符串

javascript - 隐藏 p :schedule in primefaces 的事件时间

javascript - NightmareJS 在 Promise 中循环操作不等待结果

RegEx小写字母和连字符

java - 在 Java 中查找正则表达式模式的所有匹配项 - 甚至是重叠的

javascript - 将任何字符串转换为驼峰大小写

javascript - 使用 re.findall 解析 javascript