2017-01-31 68 views
1

我想在正斜槓之後和不包含字符的尾部之前替換文本。正則表達式來獲取兩個字符之間的文本?

My text: 
<h3>notThisText/IWantToReplaceThis)<h3> 

$('h3').text($('h3').text().replace(regEx, 'textReplaced')); 

Wanted result after replace: 
notThisText/textReplaced) 

我已經試過

regex = /([^\/]+$)+/ //replaces the parantheses as well 
regex = \/([^\)]+) //replaces the slash as well 

但你可以在我的意見看,這些都不排除兩個斜線和結束括號中。有人可以幫忙嗎?

+1

您可以添加的'/'在替換模式,'.replace(/ \/[^)] * \)/,'/ textReplaced)')'。 –

+0

是的,但那不是我正在尋找的 – slowpoke123

+0

所以你是說不可能寫一個regEx匹配兩個字符之間的文本,不包括JS中的字符? – slowpoke123

回答

1

/(?<=\/)[^)]+(?=\))/這樣的模式在JS中不起作用,因爲它的正則表達式引擎不支持lookbehind構造。所以,你應該使用下列解決方案之一:

s.replace(/(\/)[^)]+(\))/, '$1textReplaced$2') 
s.replace(/(\/)[^)]+(?=\))/, '$1textReplaced') 
s.replace(/(\/)[^)]+/, '$1textReplaced') 
s.replace(/\/[^)]+\)/, '/textReplaced)') 

(...)形式可以與$ +號,反向引用來引用到一個捕獲組,從替換模式。第一種解決方案是使用/),並將它們放入捕獲組。如果您需要匹配連續的重疊匹配,請使用第二個解決方案(s.replace(/(\/)[^)]+(?=\))/, '$1textReplaced'))。如果最後不需要),則第三個解決方案(replace(/(\/)[^)]+/, '$1textReplaced'))將會執行。如果/)是事先已知的靜態值,則最後的解決方案(s.replace(/\/[^)]+\)/, '/textReplaced)'))將起作用。

+1

哇謝謝,我結束了使用第二種解決方案,效果很好! – slowpoke123

0
var text = "notThisText/IWantToReplaceThis"; 
text = text.replace(/\/.*/, "/whatever"); 
output : "notThisText/whatever"` 
0

您可以使用str.split('/')

var text = 'notThisText/IWantToReplaceThis'; 
var splited = text.split('/'); 
splited[1] = 'yourDesireText'; 
var output = splited.join('/'); 
console.log(output); 
0

嘗試以下操作:在你的情況STARTCHAR = '/',則EndChar = ')',origString = $( 'H3')文本()

function customReplace(startChar, endChar, origString, replaceWith){ 
var strArray = origString.split(startChar); 
return strArray[0] + startChar + replaceWith + endChar; 
} 
0

首先,您沒有清楚地定義您要替換的文本的格式和非替換部分。例如,

  • notThisText是否包含斜線/
  • IWantToReplaceThis是否包含任何括號)

因爲有太多的不確定因素,這裏的答案只會顯示模式正是你的例子匹配:

yourText.replace(/(\/).*?(\))/g, '$1textReplaced$2') 
相關問題