홈>
명백한 단어를 별표로 바꾸는 콘텐츠를 편집 가능한 div로 만들고 싶습니다. 이것은 내 JavaScript 코드입니다 :
function censorText(){
var explicit = document.getElementById("textbox").innerHTML;
var clean = explicit.replace(/"badtext1","cleantext1"|"badtext2","cleantext2"/);
document.getElementById("textbox").innerHTML = clean;
}
contenteditable div
의 HTML은 다음과 같습니다.
<div contenteditable="true" onkeyup="censorText()" id="textbox">Hello!</div>
보시다시피, 정규 표현식 연산자를 사용하여 여러 문자열을 한 번에 바꾸려고 시도했지만 작동하지 않습니다.
badtext2
를 대체하지 않습니다
cleantext2
와 함께
그리고 그것은
badtext1
를 대체합니다
0
와 함께
. 단일
.replace()
를 만들 수 있습니까?
문이 여러 문자열을 대체합니까?- 답변 # 1
- 답변 # 2
이를 처리하는 일반적인 방법은 다음과 같습니다.
사전을 만들고 정규 표현식을 만드십시오 :
var dictionary = { bad: 'good', worse: 'better', awful: 'wonderful'}, regexp = RegExp ('\\b(' + Object.keys (dictionary).join ('|') + ')\\b', 'g');
regexp는 사전 키워드로 구성됩니다 (RegExp 특수 문자를 포함해서는 안 됨).
이제 교체 문자열 대신 함수를 사용하여 교체를 수행하면 해당 키 값만 반환합니다.
OP는 대문자/소문자를 참조하지 않았다. 다음은 초기 및 모든 한도를 충족시키고 코드를 함수로 래핑합니다.text = text.replace (regexp, function (_, word) { return dictionary[word]; });
function clean (text) { var dictionary = { bad: 'good', worse: 'better', awful: 'wonderful'}, regexp = RegExp ('\\b(' + Object.keys (dictionary).join ('|') + ')\\b', 'ig'); return text.replace (regexp, function (_, word) { _ = dictionary[word.toLowerCase ()]; if (/^[A-Z][a-z]/.test (word)) // initial caps _ = _.slice (0,1).toUpperCase () + _.slice (1); else if (/^[A-Z][A-Z]/.test (word)) // all caps _ = _.toUpperCase (); return _; }); }
바이올린 참조 : http://jsfiddle.net/nJNq2/
- 답변 # 3
Jinzhao의 답변에 대한 답변이지만 다른 참고 사항이 있습니다.
1) RegEx에서 "를 사용하지 마십시오
2) 여러 문자열을 일치시킬 수 있지만 단일 RegEx를 사용하여 하나의 값으로 만 대체한다고 생각합니다. Jinzhao가 한 것처럼 여러 항목을 일치시키는 것으로 생각할 수있는 유일한 방법입니다.다음 코드 스 니펫이 저에게 효과적입니다.
function censorText(){ var explicit = document.getElementById("textbox").innerHTML; var clean = explicit.replace(/bad|worse/gi,"good"); document.getElementById("textbox").innerHTML = clean; }
내가 찾은 다른 문제는 교체가 발생하면 커서가 텍스트 상자의 시작 부분으로 커서를 돌려 실망시키는 것입니다. 이에 대한 답변을 찾으면 게시하겠습니다.
관련 자료
- python - 두 번째 및 세 번째 문자열을 문자열로 교체
- python - df 열에서 부분 문자열을 바꾸는 방법
- python - 각 문자가 여러 문자열에 있는지 어떻게 확인합니까?
- python - 여러 열이 키로 지정된 데이터 프레임의 행을 다른 데이터 프레임의 행으로 교체
- javascript - forEach 내부에서 문자열 교체 방법 사용
- computer science - Javascript에서 문자열을 분리 할 때 분할 후 각 문자열에 대해 메서드를 어떻게 실행해야합니까?
- similarity - 파이썬의 여러 문자열에서 비슷한 것을 어떻게 찾습니까?
- R의 행렬에서 여러 열의 여러 문자열 분할
- ruby - 여러 값을 반환하는 메서드 스터 빙 rspec
- c# - 하나의 방법으로 하나의 양식으로 여러 버튼에 대한 값 가져 오기
- python - 데이터 프레임의 여러 열에 대한 문자를 더 빠르게 추출하는 방법
- java - Android에서 개조를 사용하여 단일 POST 방법으로 텍스트 데이터, 단일 이미지 및 다중 이미지를 게시하는 방법은 무엇입니까?
- Javascript MathJax 텍스트 문자열에서 여러 달러 ($) 기호를 파운드 기호로 바꾸는 방법은 무엇입니까?
- javascript - 여러 비동기/대기 호출을 Promiseall로 바꾸는 방법은 무엇입니까?
- bash - Linux에서 sed를 사용하여 문자열을 여러 세미콜론 및 특수 문자로 바꾸는 방법
- r - 조건이 충족되면 여러 열의 셀 값을 열의 값으로 바꿉니다
- python - Regex를 사용하여 여러 문자열을 추출하는 방법은 무엇입니까?
- javascript - 문자열에서 여러 "\ n"을 일치시키고 단일 "\ n"으로 바꾸는 방법
- 여러 형식의 날짜 (문자열) 정렬? 파이썬
- typescript - Angular subscribe 메서드가 여러 번 호출 됨
관련 질문
- Javascript의 배열 요소에서 단어 목록으로 RegEx로 문장을 어떻게 바꾸나요?
- javascript : React JS에서 map 메소드를 사용하여 배열 데이터를 인쇄하는 방법은 무엇입니까?
- javascript : 플러터 웹에서 방향을 가로로 설정하는 방법은 무엇입니까?
- javascript : 라이트 모드 다크 모드 토글
- javascript : 템플릿 문자열에 두 개의 인수를 추가하는 방법
- 첨부 파일이 있는 HTML/JavaScript mailto(또는 대안)
- javascript : RegEx 및 자바 스크립트로 여러 줄 문자열 자르기
- javascript : 입력 값 html 및 js 추출
- javascript : HTML 전화번호 유효성 검사
- JavaScript를 사용하여 버튼 클릭 시 배열 값을 지우시겠습니까?
/.../g
사용 전역 교체를 나타냅니다.