【问题标题】:Javascript Regex match everything except double spaces then replaceJavascript Regex 匹配除双空格以外的所有内容,然后替换
【发布时间】:2013-10-04 16:35:44
【问题描述】:

我需要一个正则表达式,它可以匹配除空格或双空格之间的单词以外的任何内容。

喜欢:

我们假设 underscores 等于 spaces 只是举例。

foo_bar__The_Quick_Dog__is_addicted_to___jumping___

然后replacespaces 与任何symbol,最好是Comma (,)。

所以我们应该有:foo bar,The Quick Dog,沉迷于跳跃。

但是,jumping 这个词不应该用comma 替换它的空格,因为它在末尾...添加comma 将毫无意义

我试过了:

/\(\s*([^)]+?)\s*\)/

和

[a-z].\s{2,}.*

和

\s\s.*[a-z]

和

(?:[a-zA-Z0-9]+[ ])+[a-zA-Z0-9]+

还有几百个……还是不行。

谢谢

【问题讨论】:

  • 我很困惑is addicted to 后面有一个Coma,但to 和jumping 之间只有一个空格你能澄清一下吗?

标签: javascript regex match whitespace


【解决方案1】:

所以你的意思是这样的?

var str = 'foo bar  The Quick Dog  is addicted to  jumping   ';
str.replace(/\s\s+/g, ', ').replace(/, (\n|$)/g, '.$1');
"foo bar, The Quick Dog, is addicted to, jumping."

将多空格替换为“逗号空格”,然后将“逗号空格换行”或“逗号空格结束”替换为“句号换行”或“句号结束”。

【讨论】:

  • 太棒了!请问你能解释一下这部分吗? (\n|$)/g
  • (\n|$) 是捕获组中的“新行”或“结束”。 / 结束模式,g 是 global 标志。
  • 像 VOODOO 一样工作!...太好了,我欠你一个汉堡 :)
  • Man 是String.replace(1,2,3) 中的 3(rd) 参数是一个好习惯吗?即 .replace(/, (\n|$)/g, '.$1') $1 是第三个参数。
  • @ErickBest 没有第三个参数,只有两个;第一个逗号在 RegExp 文字内
【解决方案2】:

使用替换器 (mdn doc):

var s = 'foo bar  The Quick Dog  is addicted to jumping  ';
s.replace(/ {2,}(.)?/g, function (m, p) { return p ? ', ' + p : '.'; });
// prints "foo bar, The Quick Dog, is addicted to jumping."

使用match + join。这也修剪掉了前导空格:

var s = '   foo bar  The Quick Dog  is addicted to jumping  ';
var m = s.match(/[^ ]+( [^ ]+)*/g);
m && (m.join(', ') + '.'); // null OR join()
// prints "foo bar, The Quick Dog, is addicted to jumping."

match + join 在函数内部:

function fix(str, separator) {
    var m = str.match(/[^ ]+( [^ ]+)*/g);
    return m && (m.join(separator || ', ') + '.');
}

var s = ' ab cd   ef   gh ';
fix(s); // "ab cd, ef, gh."
fix(s, ' - '); // "ab cd - ef - gh."
fix(' '); // null

【讨论】:

  • Thax man.. 虽然@Paul S. 的解决方案确实运作良好,因为它神奇地在末尾添加了句号,同时修剪掉了尾随的空格。这就是我真正想要的。
  • 萨克斯一百万...您能否解释一下function 中的两个参数代表什么? m 和 p...?
  • @wared 如果你正在使用一个函数,为什么不保持你的前瞻风格呢? /( {2,}(?!$|\n))|( {2,}(?=$|\n))/g 和 function ($0, $1, $2) {if ($1) return ', '; return '.';}
  • @ErickBest 请参阅“匹配 + 加入”示例。它还会删除前导空格。
猜你喜欢
  • 2013-12-26
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
相关资源
最近更新 更多