首页 > 解决方案 > JavaScript & PHP 替换包含 X 的字符串并重用 X 前后的字符串

问题描述

我有一种在消息中添加链接的自定义方式,文本看起来像这样:

<?php
    $message = 'Some text some text mylink@https://www.mylink.com some text some text some text';
?>

我想获得所有出现的模式somelink@linkurl并将它们替换为

<a href='linkurl'>somelink</a>

一旦用户提交他的消息,就可以建立一个真正的链接。

我需要在 JavaScript 和 PHP 中执行此操作。我实际上已经知道如何做到这一点,它将涉及通过分隔符拆分字符串,然后通过搜索@-signs 过滤所有内容,然后在替换相应的值后以某种方式将所有内容放在一起。

我的想法听起来很复杂,所以我希望有一种更简单更有效的方法来实现相同的结果。

我如何在 Javascript 和 PHP 中最好地做到这一点?

标签: javascriptphp

解决方案


您可以在两种语言中使用相同的正则表达式模式:

/([^ ]+)@([^ ]+)/

([^ ]+)表示“除空格之外的任何内容”,因此它还包括下划线和其他可以在 URL 中但不在\w单词字符的正则表达式符号中的字符。

并将其替换为

<a href='$2'>$1</a>

PHP:

<?php
$re = '/([^ ]+)@([^ ]+)/';
$str = 'Some text some text mylink@https://www.mylink.com some text some text some text';
$subst = '<a href=\'$2\'>$1</a>';

$result = preg_replace($re, $subst, $str, 1);

JS:

const regex = /([^ ]+)@([^ ]+)/;
const str = `Some text some text mylink@https://www.mylink.com some text some text some text`;
const subst = `<a href='$2'>$1</a>`;

const result = str.replace(regex, subst);

结果:

Some text some text <a href='https://www.mylink.com'>mylink</a> some text some text some text

推荐阅读