【问题标题】:Replace a string using regular expression having two variables使用具有两个变量的正则表达式替换字符串
【发布时间】:2022-11-20 05:50:44
【问题描述】:

我需要使用正则表达式值替换来替换两个字符串,所以生成的字符串是$?tlang=es&text=Hello world,所以我不知道在这里使用String.prototype.replace()

const value = "Hello world"
const queryString = "?tlang=es&text=$1"

在这个场景中,valuequeryString 是硬编码的,但在“现实生活”中,它应该是正则表达式组捕获的结果,如 line.match(/msgid \"(.*)\"/),其中 line 是重复的文本行,而 queryString是用户提交的内容。

我以为我可以做到这一点,但也许在有更好的解决方案(我找不到)的地方需要付出太多努力:

const line = "Full name: John Doe" // text input
const sourcePattern = /Full name: (.*) (.*)/ // user input
let queryString = 'name=$1&lname=$2' // user input
const matches = line.match(sourcePattern)
matches.splice(0, 1)

for (let i = 0; i < matches.length; i++) {
    queryString = queryString.replace(`\$${i+1}`, matches[i])
}

有任何想法吗?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您可以按如下方式压缩代码:

    const line = "Full name: John Doe" // text input
    const sourcePattern = /Full name: (.*) (.*)/ // user input
    let queryString = 'name=$1&lname=$2' // user input
    const [_, ...matches] = line.match(sourcePattern)
    
    console.log(queryString.split(/$d+/)
      .map((p,i)=>`${p}${matches[i]??''}`).join(''))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 2022-07-08
      • 2015-02-27
      • 1970-01-01
      • 2018-07-13
      相关资源
      最近更新 更多