Javascript 替换并保留节点js中字符串的某些部分

Javascript 替换并保留节点js中字符串的某些部分,javascript,node.js,Javascript,Node.js,如何在节点js/Javascript中执行以下操作 例如,说出原始事件=“xyz abc def” 我想用“123-abc-456”替换上面字符串的全部内容。xyz和def在上述字符串中是常量,而abc可以是原始出现的任何字符串。例如 "xyz-asd-def" -> "123-asd-456" "xyz-ghj-def" -> "123-ghj-456" 如何在node js中执行此操作?您可以使用正则表达式替换要替换的每个文本字符串的所有实例 "def-xyz-asd-def"

如何在节点js/Javascript中执行以下操作

例如,说出原始事件=“xyz abc def” 我想用“123-abc-456”替换上面字符串的全部内容。xyz和def在上述字符串中是常量,而abc可以是原始出现的任何字符串。例如

"xyz-asd-def" -> "123-asd-456"
"xyz-ghj-def" -> "123-ghj-456"

如何在node js中执行此操作?

您可以使用正则表达式替换要替换的每个文本字符串的所有实例

"def-xyz-asd-def"
    .replace(new RegExp("xyz","g"), "123")
    .replace(new RegExp("def","g"), "456");

将导致“456-123-asd-456”

您可以使用正则表达式替换要替换的每个文本字符串的所有实例

"def-xyz-asd-def"
    .replace(new RegExp("xyz","g"), "123")
    .replace(new RegExp("def","g"), "456");

将导致“456-123-asd-456”

您可以使用正则表达式执行此操作

var reg = /xyz-(.+?)-def/g;
var input = 'xyz-asd-def';
var result = input.replace(reg, '123-$1-456');

您可以使用正则表达式来实现这一点

var reg = /xyz-(.+?)-def/g;
var input = 'xyz-asd-def';
var result = input.replace(reg, '123-$1-456');

基于您复杂的需求,最好的路线是一个

您可以使用捕获组仅提取所需字符串的部分,并且,如果模式不变,您可以重新生成字符串,例如

"xyz-asd-def".replace(/xyz-(\S+)-def/, "123-$1-456");

这将捕获“xyz xxx def”模式中的任何非空白字符,无长度限制。如果您希望在一个字符串中包含此模式的多个实例,请使用全局替换选项(将g附加到正则表达式的末尾)

根据您复杂的需求,最好的方法是使用全局替换选项

您可以使用捕获组仅提取所需字符串的部分,并且,如果模式不变,您可以重新生成字符串,例如

"xyz-asd-def".replace(/xyz-(\S+)-def/, "123-$1-456");

这将捕获“xyz xxx def”模式中的任何非空白字符,无长度限制。如果您希望在一个字符串中包含此模式的多个实例,请使用全局替换选项(将g附加到正则表达式的末尾)

同时提问,因为这是解决问题的真正好方法,我建议您先学习更深入的正则表达式教程,这对于正则表达式来说是一个非常简单的问题,假设“xyz”和“def“在整个字符串中是唯一的吗?另外,您希望在一个字符串中出现多少次?最后,你到底试过什么?展示你的作品。@James你是对的。事实上,我不知道该怎么做,也不知道该在网上搜索什么样的案例。实际上,我对NodeJS和javascript非常陌生。今天我正在写我的第一个脚本。“abc可以是任何字符串”这意味着它可以包含特殊字符吗?@kgangadhar是的,它可以。虽然问关于SO的问题是解决问题的一个很好的方法,但我建议你先有一个更深入的正则表达式教程,这对于正则表达式来说是一个非常简单的问题,假设“xyz”和“def”是安全的在整个字符串中是唯一的吗?另外,您希望在一个字符串中出现多少次?最后,你到底试过什么?展示你的作品。@James你是对的。事实上,我不知道该怎么做,也不知道该在网上搜索什么样的案例。实际上,我对NodeJS和javascript非常陌生。我今天正在写我的第一个脚本。“abc可以是任何字符串”这是否意味着它可以包含特殊字符?@kgangadhar是的,它可以。是的,你可以,但这个解决方案很脆弱-尝试使用“xyz asd def xyz dsa def”或任何其他包含多个模式的字符串变体。这可能不重要,但解释解决方案的局限性很重要。@James你是对的,在这种情况下贪婪的正则表达式将失败。通过使其懒惰,可以很容易地改变这种行为,这种行为的用例决定了它应该以何种方式进行行为。我已经更新了我的答案,使用了惰性正则表达式,因为这似乎更适合本例中的问题。是的,你可以,但这个解决方案很脆弱-尝试使用“xyz asd def xyz dsa def”或任何其他包含多个模式的字符串变体。这可能不重要,但解释解决方案的局限性很重要。@James你是对的,在这种情况下贪婪的正则表达式将失败。通过使其懒惰,可以很容易地改变这种行为,这种行为的用例决定了它应该以何种方式进行行为。我已经更新了我的答案,使用一个lazy正则表达式,因为这似乎更适合本例中的问题。