正则表达式,例外

时间:2017-01-22 09:57:11

标签: html regex

我正在寻找一个正则表达式,用一个不间断的空格替换所有元素除了:字母,数字,一个点'。',一个问号'?&# 39;和一个不间断的空间' '

例如,字符串'hello@world!.'将变为'hello world .'。 有人可以向我解释我将如何做到这一点,因为我对正则表达式的工作方式知之甚少吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

既然你已经标记了问题html,我想你需要一个javascript来替换?如果是这样,这应该有效:

result = subject.replace(/[^\w\d.? ]/g, " ");

[]表示"以下任何字符,但当^是第一个字符时,选择被否定。 \w表示"单词字符",\d表示"数字",因此翻译为英语,此模式将读取如下内容:

每个不是单词字符,数字,点,问号或不间断空格的字符。

模式之后的g意味着模式是全局的,应该替换所有匹配,而不仅仅是第一个匹配。

答案 1 :(得分:0)

如果您使用的是文本编辑器,则可以这样做:

要找的正则表达式:

[^a-zA-Z0-9.? ]

替换为:单个空格

演示:https://regex101.com/r/PzbadC/1

[^a-zA-Z0-9.? ] - 否定字符类,匹配来自a to zA to Z0 to 9.?和空间

答案 2 :(得分:0)

  

字母,数字,点'。',问号'?'和一个不间断的空间' '

这给出了正则表达式:( |[a-zA-Z0-9.?]+)

但是你要否定这个,所以,你必须使用:(?! )[^a-zA-Z0-9.?]+

其中:

(! )       : is a negative lookahead, that  makes sure we have not  
[^a-zA-Z0-9.?]+ : is a character class that matches 1 or more character that are not in the class.



var str = 'hello @ world!.';
str = str.replace(/(?! )[^a-zA-Z0-9.?]+/g, " ");
console.log(str);