.htaccess 如何在正则表达式中替换特定字符?

jhdbpxl9  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(168)

我想在给定的文本中找到一个/符号,并替换为*符号。
http://localhost:7070/home/test/mobile:device.testdevice.id1_123.id2_456.id3_ab-c.CONSTANT_formula:map/TreeMap.json
这里的常数是固定的,它不会得到改变,但在常数后,可以有任何字符。我想找到的网址中的常数,并寻找/符号,并取代它与*符号。
类似于http://localhost:7070/home/test/mobile:device.testdevice.id1_123.id2_456.id3_ab-c.CONSTANT_formula:map*TreeMap.json
我尝试使用下面的正则表达式,但它匹配CONSTANT之后的所有内容,因为我使用了一个或多个标识符

^CONSTANT(.+)

有没有办法找到/符号并替换为 * 符号?

sh7euo9m

sh7euo9m1#

使用mod_rewrite规则,您可以在关键字CONSTANT之后将/替换为*

RewriteCond %{REQUEST_URI} ^(/.*CONSTANT[^/]*)/(.*) [NC]
RewriteRule ^ %1*%2 [L,NE,R]

请注意,它将在URL中进行替换后执行外部重定向。
我们在RewriteCond中使用2个捕获组:

  1. ^(/.*CONSTANT[^/]*)匹配CONSTANT之前的所有字符,后跟0个或多个不是/的字符
    1.然后匹配/
  2. (.*):最后,我们匹配第二个捕获组中的所有其他内容
unguejic

unguejic2#

通过使用JavaScript,只需使用String.prototype.replace即可。
让正则表达式将字符串从CONSTANT分成两部分。将后一部分中的所有/替换为*

const reg = /CONSTANT(.*)/g
const s = "http://localhost:7070/home/test/mobile:device.testdevice.id1_123.id2_456.id3_ab-c.CONSTANT_formula:map/dir1/dir2/TreeMap.json"
const fixedStr = s.replace(reg, (match, g1, idx, origStr) => {
    return origStr.slice(0, idx) + match.replace(/\//g, '*');
});
console.log(fixedStr)

相关问题