以下是我的问题的最小示例:
http://jsfiddle.net/pm913emb/5/
id | value
----------------
1 | 1_426_7894(245)
2 | 4_463_9654(465)
3 | 3_954_3678(465)
4 | 9_356_5412(157)
5 | 5_986_3578(987)
6 | 2_125_4689(749)
7 | 8_286_7859(879)
正如你所看到的,这个字符串包含多个句子,有两个地方我添加了多个空格:一个位于句子的末尾,另一个位于句子的中间。有正则表达式,我在这个字符串上运行。
问题是:正如您在控制台中看到的那样,匹配的结果不包含这些多个空格。
这个问题可能是什么原因。可能的解决方案?
请帮助..:/
答案 0 :(得分:2)
浏览器不显示连续的空格。如果您要使用实体,则会显示空格。例如,
< - 2个空格
将显示为
< - 一个空格
在浏览器中。
如果您使用实体作为空格
  
你会得到
(2个空格(注意这里是一个间距)。
这是一篇较长的文章。
我认为这可以实现你想要的东西(可能不是最干净的,我不经常写JS)..
<script type="text/javascript">
var string = 'Question 6 of 7 '
+'Three, the patient suddenly develops shortness of breath and becomes hypotensive. His heart rate is 100/min, with a normaI PR and QRS intervaI.'
var sentencesMatch = string.match(/([\sa-zA-Z\d]){1}.+?[\.!\?]{1}([\s ]+|$)/g);
var output = '';
for(var x= 0; x < sentencesMatch.length; x++){
output += sentencesMatch[x].replace(/ /g, ' ');
}
document.write(output);
</script>
答案 1 :(得分:1)
当您尝试打印数组本身时,浏览器会修剪控制台中的额外空白区域。尝试打印单个数组元素并(根据您的浏览器),您会看到它们确实包含额外的空格。
//You'll need to have the console open to see the results here
var string = 'Question 6 of 7 '
+'Three, the patient suddenly develops shortness of breath and becomes hypotensive. His heart rate is 100/min, with a normaI PR and QRS intervaI.'
var sentencesMatch = string.match(/([\sa-zA-Z\d]){1}.+?[\.!\?]{1}([\s ]+|$)/g);
console.log(sentencesMatch);
for (var i in sentencesMatch){
//Add quotes so we can see trailing whitespace
console.log('"' + sentencesMatch[i] + '"');
}
&#13;
如果您想将该字符串实际放入元素中,那么您将遇到同样的问题。以下是解决方法:
可能是最简单的解决方案。使用white-space
属性
var string = 'Question 6 of 7 '
+'Three, the patient suddenly develops shortness of breath and becomes hypotensive. His heart rate is 100/min, with a normaI PR and QRS intervaI.'
var sentencesMatch = string.match(/([\sa-zA-Z\d]){1}.+?[\.!\?]{1}([\s ]+|$)/g);
for (var i in sentencesMatch){
var p = document.createElement("p");
document.body.appendChild(p);
p.innerHTML = '"' + sentencesMatch[i] + '"';
p.className = "keep-spaces";
}
&#13;
.keep-spaces{
white-space: pre;
}
&#13;
此解决方案用“非破坏空间”替换所有空白字符。这由HTML实体
, 
或&xa0;
表示。
var string = 'Question 6 of 7 '
+'Three, the patient suddenly develops shortness of breath and becomes hypotensive. His heart rate is 100/min, with a normaI PR and QRS intervaI.'
var sentencesMatch = string.match(/([\sa-zA-Z\d]){1}.+?[\.!\?]{1}([\s ]+|$)/g);
for (var i in sentencesMatch){
var p = document.createElement("p");
document.body.appendChild(p);
//Replace spaces with to preserve consecutive white space
var str = sentencesMatch[i].replace(/\s/g,' ');
p.innerHTML = '"' + str + '"';
}
&#13;
答案 2 :(得分:-1)
这不是你的正则表达式中的问题,也不是你拥有的字符串,如果你试过放一个&#39; \ n&#39;。你看它基本上只用一个空格替换它,因此问题在于你的浏览器。你可能想要添加这样的标题来修复它:
content-type: text/html
或尝试使用base64编码,并在需要时进行编码。解码它。