You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript/PHP字符串中按指定数组元素插入换行符

解决方案

JavaScript 实现

先写一个正则转义工具函数处理特殊字符,再通过分割+拼接实现换行插入:

// 转义正则特殊字符
function escapeRegExp(str) {
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

// 核心处理函数
function addNewlinesAroundPhrases(originalStr, phrases) {
  // 构建匹配所有短语的正则(保留分隔符)
  const regexPattern = new RegExp(`(${phrases.map(escapeRegExp).join('|')})`, 'g');
  // 分割字符串,同时保留短语本身
  const splitParts = originalStr.split(regexPattern);
  // 去掉每个片段末尾多余空格,再用换行符拼接
  return splitParts.map(part => part.trimEnd()).join('\n ') + '\n';
}

// 测试示例
const originalString = "example string is cool and you're great for helping out A string is a sequence of characters";
const targetPhrases = [" is cool", "great for", "out"];
const result = addNewlinesAroundPhrases(originalString, targetPhrases);
console.log(result);

运行后会输出你要的格式,每个目标短语前后都会插入换行,同时自动清理片段末尾的多余空格。

PHP 实现

用preg_split配合捕获组保留分隔短语,再拼接处理:

function addNewlinesAroundPhrases($originalStr, $phrases) {
  // 转义每个短语的正则特殊字符
  $escapedPhrases = array_map(function($phrase) {
    return preg_quote($phrase, '/');
  }, $phrases);
  // 构建匹配模式
  $pattern = '/(' . implode('|', $escapedPhrases) . ')/';
  // 分割字符串并保留分隔短语
  $splitParts = preg_split($pattern, $originalStr, -1, PREG_SPLIT_DELIM_CAPTURE);
  // 清理每个片段末尾空格,用换行拼接
  $processedParts = array_map(function($part) {
    return rtrim($part);
  }, $splitParts);
  return implode("\n ", $processedParts) . "\n";
}

// 测试示例
$originalString = "example string is cool and you're great for helping out A string is a sequence of characters";
$targetPhrases = [" is cool", "great for", "out"];
$result = addNewlinesAroundPhrases($originalString, $targetPhrases);
echo $result;

说明

两种实现的核心逻辑一致:

  1. 转义短语中的正则特殊字符,避免匹配出错
  2. 用正则分割原字符串,同时保留目标短语作为独立片段
  3. 清理每个片段的末尾多余空格,再用\n 拼接所有片段,最后补一个换行符

内容的提问来源于stack exchange,提问作者user12585152

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:44:53