【问题标题】:join result that is separated by a diffrent regex match由不同的正则表达式匹配分隔的连接结果
【发布时间】:2012-10-19 21:36:04
【问题描述】:

你好,我正在做类似how to replace dots inside quote in sentence with regex的事情

var string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. "Vestibulum interdum dolor nec sapien blandit a suscipit arcu fermentum. Nullam lacinia ipsum vitae enim consequat iaculis quis in augue. Phasellus fermentum congue blandit. Donec laoreet, ipsum et vestibulum vulputate, risus augue commodo nisi, vel hendrerit sem justo sed mauris." Phasellus ut nunc neque, id varius nunc. In enim lectus, blandit et dictum at, molestie in nunc. Vivamus eu ligula sed augue pretium tincidunt sit amet ac nisl. "Morbi eu elit diam, sed tristique nunc."';

// seperate the quotes
var quotes = string.match(/"(.)+?"/g);
var test = [];

// for each quotes
for (var i = quotes.length - 1; i >= 0; i--) {

    // replace all the dot inside the quote
    test[i] = quotes[i].replace(/\./g, '[dot]');
};

console.log(test);

可以说我们已经使用正则表达式进行了更改,但我坚持如何将其加入到现有的 var string 中,因为我的结果在 var test 中分离?还是有更好的方法?

输出应该是这样的

Lorem ipsum dolor sit amet,consectetur adipiscing elit。 "Vestibulum interdum dolor nec sapien blandit a suscipit arcu balloon[dot] Nullam lacinia ipsum vitae enim consequat iaculis quis in augue[dot] Phasellus infantum congue blandit[dot] Donec laoreet, ipsum et vestibulum vulputate, risus augue commodo nisi, vel hendrerit sem justo sed mauris[dot]" Phasellus ut nunc neque, id varius nunc。在 enim lectus、blandit et dictum at、molestie in nunc。 Vivamus eu ligula sed augue pretium tincidunt sat amet ac nisl。 “Morbi eu elit diam, sed tristique nunc[dot]”

*ps 我不确定标题是否正确

谢谢

【问题讨论】:

    标签: javascript regex node.js


    【解决方案1】:

    您可以改为在 " 处拆分,每隔一个数组元素进行替换,然后再次加入:

    var parts = string.split('"');
    for (var i = 1; i < parts.length; i += 2) {
        parts[i] = parts [i].replace(/\./g, '[dot]');
    };
    string = parts.join('"');
    

    由于split 将在索引0 处创建一个空字符串,如果该字符串以" 开头,这应该适用于所有情况。

    请注意,尾部不匹配的" 的边缘情况将导致" 之后的每个点也被替换。如果您不想这样做,只需将for 条件更改为i &lt; parts.length - 1

    JSFiddle Demo

    【讨论】:

    • 如果没有引用最后一部分会发生什么的小问题。
    • 我怎么没想到这个哈哈哈。天才。
    • @Asad,是的,我对此表示怀疑……尽管在这种情况下应该发生什么是值得怀疑的……它可能暗示一个不完整的字符串,在这种情况下行为是正确的。否则它可能是无效的字符串。
    【解决方案2】:

    使用正则表达式但带有替换功能:

    string.replace(/"[^"]+"/g, function(m) {return m.replace(/\./g,"[dot]")})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多