簡體   English   中英

正則表達式在單詞結尾處修改特定情況下的字符

[英]regex to modify characters in specific case at the end of a word

我在翻譯項目上工作,我需要在最后修改一些字符,例如,如果用戶輸入的字樣如下:

打字: “yilanin” =>目標詞(我想要的): “yilaNG”

“suyunin” => “suyuNG”

“kalinin” => “kaliNG”

“batinin” => “batiNG”

等等......

但我有一個問題:我不想修改“nin”字符,如果它們位於單詞的中間或開頭,如:

“kinindan *”“=> **”kinindan“

“sininteki ”“=> ”sininteki“

“nin” => “nin”

“ninkisi” => “ninkisi”

等等......

我的意思是每個“xxxnin”“xxxNG”

“xxxninxxx”“xxxninxxx” (無修改),

“nin”“nin” (無修改)......

我試圖非常清楚地解釋我的問題,並且我希望你能理解......

 $(document).ready(function(){ $("#ta_1").keyup(function(event) { var text2 = $(this).val(); text2 = text2.replace(/([abcçdefgğhıijklmnoöprsştuüvyzABCÇDEFGHIİJKLMNOÖPRSTUÜVYZ])nin$/g, '$1NG'); $("#ta_1").val(text2); }); }); 
 <!DOCTYPE html> <html lang="en"> <head> <title></title> <meta charset="utf-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> </head> <body> <textarea id="ta_1" rows="5" cols="28"></textarea> </body> </html> 

您需要跟蹤兩個事件: keyup (跟蹤文本輸入延續)和blur (檢查字符串輸入結束)。 然后,使用2種不同的替代品:

 $(document).ready(function(){ $("#ta_1").on("keyup blur", function(event) { var text2 = $(this).val(); if (event.type !== "blur") { // Trigger only on keyup text2 = text2.replace(/([a-zA-ZçğıöşüÇİÖÜ])nin\\b(?![a-zA-ZçğıöşüÇİÖÜ])([\\s\\S])/g, '$1NG$2'); } else { // we have blur text2 = text2.replace(/([a-zA-ZçğıöşüÇİÖÜ])nin$/, '$1NG'); } $("#ta_1").val(text2); }) }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <textarea id="ta_1" rows="5" cols="28"></textarea> 

keyup事件將檢查已輸入的單詞,其中包含(我猜)土耳其語單詞 - ([a-zA-ZçğıöşüÇİÖÜ])nin\\b(?![a-zA-ZçğıöşüÇİÖÜ])([\\s\\S]) -接下來是一些將作為單詞邊界的字符。

blur事件將僅檢查整個字符串末尾的nin ,並在必要時執行替換。

更新

這是另一種方法:在鍵入時替換,如果鍵入另一個字符,則還原。 但是, 如果可以使用同一個替換模式替換多個字符組合 ,則此方法將不起作用 (將不清楚要恢復的字符串):

 $(document).ready(function(){ $("#ta_1").on("keyup", function(event) { var text2 = $(this).val(); // Replace nin to NG in general text2 = text2.replace(/([a-zA-ZçğıöşüÇİÖÜ])nin\\b(?![a-zA-ZçğıöşüÇİÖÜ])/g, '$1NG'); // Restore nin from NG text2 = text2.replace(/([a-zA-ZçğıöşüÇİÖÜ])NG(?=[a-zA-ZçğıöşüÇİÖÜ])/g, '$1nin') $("#ta_1").val(text2); }) }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <textarea id="ta_1" rows="5" cols="28"></textarea> 

會這樣的嗎?

text.replace(/([\s\S])nin\b(?![çğıöşüÇİÖÜ])/, '$1NG');

\\b匹配單詞邊界位置,例如空格,標點符號或字符串的開頭/結尾。

?![çğıöşüÇİÖÜ]否定前瞻,如果找到任何指定的字符,則指定不匹配。

 var stringArr = ['suyunin', 'kalinin', 'batinin', 'kinindan', 'sininteki', 'nin', 'ninkisi', 'xxxnin', 'xxxninxxx', 'nin', 'Kalininü']; var generated = document.getElementById('generated'); for (var i = 0; i < stringArr.length; i++) { var newStr = stringArr[i].replace(/([\\s\\S])nin\\b(?![çğıöşüÇİÖÜ])/, '$1NG'); var li = document.createElement('li'); li.appendChild(document.createTextNode(newStr)); generated.appendChild(li); } 
 #generated { color: red; } 
 <!DOCTYPE html> <html> <body> Array List: <br>['suyunin', 'kalinin', 'batinin', 'kinindan', 'sininteki', 'nin', 'ninkisi', 'xxxnin', 'xxxninxxx', 'nin']; <br>Generated List: <br> <span id='generated'></span> </body> </html> 

這應該工作

(?!^nin)(nin$)

正則表達式演示

JS代碼

 var re = /(?!^nin)(nin$)/gm; var str = 'suyunin\\nabcninshs\\nning\\ngnin\\nning\\nkinindan*\\nsininteki\\nnin\\nninkisi'; var subst = 'NG'; var result = str.replace(re, subst); document.writeln(result) 

JSFiddle演示

Ideone演示

嘗試這個

(\w)(nin)\b

正則表達式演示

 $(document).ready(function(){ //setup before functions var typingTimer; //timer identifier var doneTypingInterval = 1000; //time in ms, 1 second for example var $input = $('#myInput'); //user is "finished typing," do something function doneTyping () { //do something } $("#ta_1").keyup(function(event) { var text2 = $(this).val(); var re = /(\\w)(nin)([^a-zA-Z])/g; var subst = '$1NG$3'; text2 = text2.replace(re, subst); var re = /(\\w)(NG)(\\w)/; var subst = '$1nin$3'; text2 = text2.replace(re, subst); $("#ta_1").val(text2); clearTimeout(typingTimer); typingTimer = setTimeout(doneTyping, doneTypingInterval); }); $("#ta_1").keydown(function(event) { clearTimeout(typingTimer); }); function doneTyping () { var text2 = $("#ta_1").val(); var re = /(\\w)(nin)\\b/g; var subst = '$1NG'; text2 = text2.replace(re, subst); $("#ta_1").val(text2); } }); 
 <!DOCTYPE html> <html lang="en"> <head> <title></title> <meta charset="utf-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> </head> <body> <textarea id="ta_1" rows="5" cols="28"></textarea> </body> </html> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM