【问题标题】:Add variable into string将变量添加到字符串中
【发布时间】:2017-09-09 04:07:25
【问题描述】:

我需要做的就是在每个特定字符串之前添加一个变量。

例子:

var exampleString = "blabla:test abcde 123test:123";
var formattedString = "el.blabla:test abcde el.123test:123";

如你所见,当我有“XXX:XXX”之类的东西时,我需要在它前面添加一个变量。

我有正则表达式来查找“XXX:”

var regex = new RegExp(/\w+([aA-zZ]:)/g)

但是当我尝试替换它时,它会替换所有而不是添加变量“el”。

var exampleString = "blabla:test abcde 123test:123";
var formattedString = exampleString.replace(new RegExp(/\w+([aA-zZ]:)/g), 'el.');
// formattedString is now "el.test abcde el.123"
// Instead of "el.blabla:test abcde el.123test:123"

任何人都可以完成这项工作吗?谢谢:)

来源:Javascript Regex: How to put a variable inside a regular expression?

【问题讨论】:

  • 希望this可以帮助到你。实际上,逻辑是您可以使用() 对所需的子字符串进行分组。而在替换字符串中,您可以使用 "$1" 来使用第一个匹配的组
  • 谢谢你,这也是一个有用的线程:)

标签: javascript regex


【解决方案1】:

就用这个

exampleString.replace(/(\w*):(\w*)/gi, 'el.$1:$2');

正则表达式解释:

捕获组 (\w*) 用于捕获任何出现次数的任何字母, $1 和 $2 指定第一个和第二个捕获组。

【讨论】:

  • 解释$1$2是什么意思
【解决方案2】:

您需要使用^ 仅在开头进行匹配。并删除 g 修饰符,因为您只想替换一次,而不是每次。

也没有理由使用new RegExp(),只需使用RegExp 文字即可。

在替换字符串中,需要使用$&将原字符串复制到替换中。

var exampleString = "blabla:test abcde 123test:123";
var formattedString = exampleString.replace(/^\w+[a-z]:/i, 'el.$&');
console.log(formattedString);

此外,在任何一种情况下匹配所有字母的正确方法是使用[A-Za-z],而不是[aA-zZ],或者使用i 修饰符使正则表达式不区分大小写。您的正则表达式匹配 A-z 范围内的所有字符,其中包括 ASCII 码中大写字母和小写字母之间的大量标点符号。

【讨论】:

  • 谢谢!我实际上需要在我的字符串中追加所有迭代
【解决方案3】:
var exampleString = "blabla:test abcde 123test:123";
var formattedString = exampleString.replace(/\w*:\w*/gi, 'el.$&');
console.log(formattedString);

正则表达式的使用和解释这里https://regex101.com/r/U2KeXi/3

这里是小提琴示例https://jsfiddle.net/a8wyLb0g/2/

【讨论】:

  • 这正是我想要的。感谢您的工作示例和您的帮助,我对正则表达式的解释很好理解 :)
  • 当需要引用整个匹配值时不需要使用捕获组,使用.replace(/\w+:\w+/gi, 'el.$&')。如果您使用\w*:\w*,您将在任何: 之前添加el.
  • @WiktorStribiżew 谢谢,我已经更新了答案和链接。
  • 我将其作为最佳答案进行了检查,因为它匹配正确的字符串而无需更改它,并且它也适用于字母数字字符:)
  • @NicolasLeucci 我们总是有改进的空间,快乐编码:)
【解决方案4】:

您应该使用insertAt 之类的函数而不是replace,请参见以下示例:

String.prototype.insertAt=function(index, string) { 
  return this.substr(0, index) + string + this.substr(index);
}

var exampleString = "blabla:test abcde 123test:123";
var regex = new RegExp(/\w+([aA-zZ]:)/g)
var formattedString = exampleString;

while ( (result = regex.exec(exampleString)) ) {
    formattedString = formattedString.insertAt(result.index, "el.");
}

console.log(formattedString);

希望对你有帮助,再见。

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 2021-12-21
    • 2023-03-12
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2012-02-23
    相关资源
    最近更新 更多