正则表达式将He
或She
替换为He/She
我有以下情况:
我试过这个
str.replace(/((\s|^|/[^!-~]/)He($|\s|/[^!-~]/)|(\s|^|/[^!-~]/)She($|\s|/[^!-~]/))/g, "He/She")
它正在抛出异常......我正在使用JavaScript。
答案 0 :(得分:0)
你的正则表达式中有一些错误:你有多个未转义的斜杠(/
),实际上并不是必需的。我简化并改进了你的正则表达式,你可以直接使用它:
(\s|^|[^!\-~])(He|She)($|\s|[^!\-~])
并将其替换为:
$1He/She$3
在JavaScript中,它会是这样的:
var text = "He went to school";
var result = text.replace(/(\s|^|[^!\-~])(He|She)($|\s|[^!\-~])/g, '$1He/She$3');
console.log(result);

这会匹配您之前和之后的任何字符(空格,!
等)并且您不会失去它,因为它会再次添加到结果中。否则,你需要积极的前瞻/外观,这在JavaScript(lookbehinds)中是不受支持的。
我可能会添加更多这些字符(例如?
,.
,这些字符都需要转义)。如果您还要匹配he
和she
,则必须使用不区分大小写的标记i
。请注意,he
的替换将为大He/She
。
编辑正则表达式中存在一个错误:[^!-~]
匹配除!
之前的所有内容以及~
之外的所有内容(因为它们之间有短划线)。您需要将其转义为[^!\-~]
。
您也可以使用单词边界,如下所示:
var text = "Sheldon went to school with her, but he did not like it.";
var result = text.replace(/\b(He|She)\b/g, 'He/She').replace(/\b(he|she)\b/g, 'he/she');
console.log(result);

答案 1 :(得分:0)
我不确定你为什么这么复杂。看起来你并不关心正确的大写,所以:
var str = "He likes to play baseball while she likes riding horses. She thinks baseball is dumb. She doesn't know if he would like to ride horses also... would he?";
console.log(str.replace(/\bs?he\b/ig, 'He/She'));

(我为这个愚蠢的句子道歉。)
\b
用作单词分隔符。
s?he
匹配"她"或者"他"。
ig
用于忽略大小写并全局搜索。