Created
January 8, 2019 00:24
-
-
Save xTCry/4b72898d761ed750450b0ea5e9e7105d to your computer and use it in GitHub Desktop.
Smart Replacing Expletives
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
console.log("\n\n-------------"); | |
const isUpperCase = (m)=> (m == m.toUpperCase()), | |
isLowerCase = (m) => (m == m.toLowerCase()); | |
const isArr = Array.isArray; | |
class VjuhSwear { | |
constructor(text) { | |
this.text = text; | |
} | |
// Обычная замена | |
v(swearRegex, word) { | |
var re = new RegExp("([^а-яё]|^)("+swearRegex+")(?=[^а-яё]|$)", "gi"); | |
// console.log(re); | |
var res = this.text.replace(re, function( full, m1, m2 ) { | |
console.log("full:", full); | |
console.log("m1:", m1); | |
console.log("m2:", m2); | |
console.log("arguments:", arguments); | |
if ( m2.charAt(0).toUpperCase() == m2.charAt(0) ) { | |
return m1 + word.charAt(0).toUpperCase() + word.slice(1); | |
} | |
else { | |
return m1 + word; | |
} | |
}); | |
return res; | |
} | |
// Smart | |
// [ "б", "л", "я" ], [ "б", "лэнч" ] | |
s(swearArr, word) { | |
var ms = swearArr.map(s=> ( "("+s+")+" ) ).join(""); | |
var re = new RegExp("([^а-яё]|^)"+ms+"(?=[^а-яё]|$)", "gi"); | |
console.log(re); | |
var res = this.text.replace(re, function( full, m1, m2 ) { | |
if(isUpperCase(m2)) { | |
return m1 + word[0].toUpperCase() + word.join("").slice(1); | |
} | |
else | |
return m1 + word.join(""); | |
}); | |
return res; | |
} | |
} | |
var vj = new VjuhSwear("та ББллляяяЯяЯ, как так таа"); | |
var repl = ["б", "л", ["э"], "нч"]; | |
// var t = vj.v("(б)+(л)+(я)+(\\s|^|\"|,|!|\\?|.|)", repl); | |
var t = vj.s([ "б", "л", "я" ], repl); | |
console.log("t:", t); | |
// var t2 = vj.v("(\\s|^|\"|«|\\()бл(я)+(\\s|^|\"|,|!|\\?|.|)", "блэнч"); | |
// console.log("t2:", t2); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment