查找并替换字符串中的特定字符序列,并在键入时替换为不同的字符序列

时间:2018-02-12 20:49:19

标签: javascript string

好的,我的客户可以构建一个文本,并在该文本中输入指定的短代码,用数据库中的数据替换。

例如:

[f], thanks for supporting our organization. Tap here: [u] to enter your donation.

将以

发送
Jamie, thanks for supporting our organization. Tap here: https://cbo.io/oh98eI to enter your donation.

我需要能够在输入时查找并更正输入中的某些错误。具体来说,如果类型[u]后跟任何字符但空格我希望能够自动为它们添加空格。我以为我有这个。

if (msg.indexOf('[u]') >= 0) {
  if (msg.match(/\[u\][^\s]/g).length) {
    vmsg = msg.replace('[u]', '[u] ');
    msg_len = msg.length;
    v$('#message_text').val(msg);
  }
}

但我看到的问题是,只要我将[u].更改为[u] . Javascript现在就会呈现"未捕获的TypeError:无法读取属性' length' of null"因为msg.match等的第二个if语句

我还有另一张类似于这张的支票,如果我同时使用它们,则第二张支票因错误而无法识别。如何编写它以便它不会导致此错误。

我遇到的下一个问题是,如果我想要使用相同的短代码两次,并且我尝试在第二个之后输入一个字符,则替换仅替换第一个匹配项,以便我最终得到[u]和第一个和第二个空间的空间仍为[u].,没有任何变化。是否有办法获得它,以便它将取代具有差异的那个而不是那个可以的。

1 个答案:

答案 0 :(得分:0)

无需使用Z to A。当没有匹配时,Other返回.length,并且当匹配时返回非空数组,因此只测试返回值本身而不是其长度。也没有必要使用match()修饰符;你只关心至少有一个匹配,你不需要返回所有匹配(因为你实际上并没有使用返回的值)。

null

g可以简化为if (msg.match(/\[u\]\S/)) {