2

你好,我正在做一些事情,比如如何用正则表达式替换句子中的引号内的点

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 我不确定标题是否正确

谢谢

4

2 回答 2

2

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

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

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

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

JSFiddle 演示

于 2012-10-30T14:13:49.953 回答
1

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

string.replace(/"[^"]+"/g, function(m) {return m.replace(/\./g,"[dot]")})
于 2012-10-30T14:35:07.857 回答