在Javascript中第N次出现时将break插入字符串

时间:2012-11-06 17:24:10

标签: javascript string

我正在尝试找到一种“最好”的方式将一个休息时间插入一串时间,这样它就会占用两条线并且总是在同一个地方分裂(例如,星期五5月11日上午11:11到11月5日星期五休息时间11:11 AM。

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

有一个方法可以遍历(不一定是除法),认为字符串可以找到多次出现的元素。所以你可以做一些类似于词汇工具的东西,它可以改变你下次使用单词或其他东西的颜色,就像勒索音符生成器,​​报纸剪辑样字母一样,使用不同的字母类型字。

举个例子我想解决的是这个,但是通用的解决方案会很好。 enter image description here

3 个答案:

答案 0 :(得分: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')

这会将字符串分成两个单词和一个1 or 2-digit后的数字,如果这些数字后跟two 1 or 2-digit个数字,后跟冒号后跟AM或{ {1}}。

答案 1 :(得分: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 

答案 2 :(得分:0)

对我而言,这似乎是XY Problem

您要做的是防止时间与AM / PM指示符分开。不应尝试修复脚本,而应更改内容本身,以便在时间和指示符之间出现non-breaking space

例如:
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用于捕获字符组,替换字符串中的$1$2引用回捕获的字符。
  • \d\d用于匹配两个连续数字,表示当时的分钟数。
  • 空格用于匹配分钟与AM / PM指示符之间的空间。如果HTML内容中有多个空格字符,则可能需要使用\s+
  • [AP]用于匹配AP字符
  • [AP]M匹配AMPM。这可以替代地写为(AM | PM)
  • g标志用于告知替换发生在字符串中发现的每一个事件。