正则表达式用他/她取代他或她

时间:2017-06-19 16:21:42

标签: javascript regex

正则表达式将HeShe替换为He/She

我有以下情况:

  1. 行首
  2. 行尾
  3. 在标点符号之前或之后
  4. 我试过这个

    str.replace(/((\s|^|/[^!-~]/)He($|\s|/[^!-~]/)|(\s|^|/[^!-~]/)She($|\s|/[^!-~]/))/g, "He/She")
    

    它正在抛出异常......我正在使用JavaScript。

2 个答案:

答案 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)中是不受支持的。

我可能会添加更多这些字符(例如?.,这些字符都需要转义)。如果您还要匹配heshe,则必须使用不区分大小写的标记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用于忽略大小写并全局搜索。