我正在寻找一个正则表达式,用一个不间断的空格替换所有元素除了:字母,数字,一个点'。',一个问号'?&# 39;和一个不间断的空间' '
例如,字符串'hello@world!.'
将变为'hello world .'
。
有人可以向我解释我将如何做到这一点,因为我对正则表达式的工作方式知之甚少吗?
谢谢!
答案 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 z
,A to Z
,0 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);