0

我正在尝试找到将中断插入到时间字符串中的“最佳”方法,以便它占用两行并始终在同一个地方拆分(例如,11 月 5 日星期五上午 11:11 到 11 月 5 日星期五休息 11:上午11点)。

我不想更改字符串所在的 div 的宽度,因为如果没有选择时间,则会显示警告消息。我知道我可以使用 .split() 函数将字符串拆分为空格并将其重建为我想要的字符串,但我认为必须有更好的方法。

最好有一种方法来遍历(不一定划分)字符串以找到不止一次出现的元素。所以你可以做一些像词汇工具这样的东西,它可以改变你下次使用单词的颜色,或者像赎金票据生成器、剪报式信件这样的东西,它使用不同的字母类型来表示相同的内容单词。

例如,我要解决的是这个问题,但通用解决方案会很好。 在此处输入图像描述

4

3 回答 3

0
var date = 'Fri Nov 5 11:11 AM'
date.replace(/(\w+ \w+ \d{1,2}) (\d{1,2}:\d{1,2} AM|PM)/, '$1 <br> $2')

这将在 2 个单词和一个数字之后拆分字符串1 or 2-digit,如果它们后面是two 1 or 2-digit用冒号分隔的数字,然后是AMor PM

于 2012-11-06T17:34:17.390 回答
0

原型

String.prototype.addLine = function(str, splitter) {
    var args = str.split(splitter);  

    return this.replace(/{(\d+)}/g, function(match, number) {
       return typeof args[number] != 'undefined'? args[number]: match;
    });
};

用法(用于 html 替换\n<br />

var d1 = "Fri Nov 5 11:11 AM"; //Original format
var d2 = "{0} {1} {2}\n {3} {4}".addLine(d1,' '); //With the new line break 
于 2012-11-06T18:01:27.610 回答
0

对我来说,这似乎是一个XY 问题

您想要做的是防止时间与其 AM/PM 指示符分开。与其尝试修复脚本,不如更改内容本身,以便在时间和指示符之间出现不间断的空格:

例如:
8:00&nbsp;AM

这将允许内容流畅地填充其容器,而无需使用换行符将时间与指示符分开。

如果内容本身是为了保留空格(因此是换行符),那么内容的样式应该具有:

在 CSS 中:
white-space: pre;

或包含在一个<pre>元素中。

或者,如果内容不是预先格式化的,但应该总是分成多行,<br>则应该使用一个元素:

Fri Nov 5<br>11:11 AM

在这种特殊情况下,我建议使用&nbsp;实体而不是<br>元素,因为该<br>元素用于表示需要多行的内容,例如诗歌或<address>.

如果您无法从服务器更改文本的格式,则可以使用.replace相对轻松地插入不间断空格字符:

newStr = yourStr.replace(/(\d\d) ([AP]M)/g, '$1&nbsp;$2');

以下是模式的细分:/(\d\d) ([AP]M)/g

  • RegExp 文字由/字符分隔
  • parens 用于捕获字符组,替换字符串中的$1and$2引用捕获的字符。
  • \d\d用于匹配两个连续的数字,代表时间中的分钟。
  • 空格用于匹配分钟和 AM/PM 指示符之间的空格。\s+如果 HTML 内容中有多个空格字符,您可能需要使用。
  • [AP]用于匹配AorP字符
  • [AP]M匹配AMPM. 这也可以写成 (AM|PM)
  • g标志用于告诉在字符串中找到的每个匹配项都发生替换。
于 2012-11-06T18:17:41.827 回答