إزالة الحرف الأول والأخير من السلسلة النصية في Python مقابل JavaScript

تم التحديث: ٢٧ مارس ٢٠٢٦

Remove First and Last Character From String Python vs Javascript

ملخص

Python: استخدم تقطيع النصوص (string slicing) text[1:-1] (الأبسط) أو text[1:len(text)-1] (الأكثر صراحة). JavaScript: استخدم .slice(1, -1) (حديث، يعمل في جميع المتصفحات) أو .substring(1, length - 1) (متوافق مع IE). كلاهما يتعامل مع النصوص الفارغة أو ذات الحرف الواحد بنفس الطريقة — حيث يتم إرجاع نص فارغ بأمان.

إزالة الحرفين الأول والأخير هي عملية شائعة في تحليل النصوص (مثل إزالة علامات الاقتباس أو الأقواس)، وتنظيف البيانات (إزالة الفواصل)، ومعالجة النصوص. رغم بساطتها، تختلف طريقة كتابتها بين اللغات، كما أن التعامل مع الحالات الاستثنائية أمر مهم. يغطي هذا المرجع جميع الطرق مع أمثلة عملية.

طرق Python

text = "Hello"
result = text[1:-1]
print(result)  # "ell"

# More examples:
text = "Programming"
result = text[1:-1]
print(result)  # "rogrammin"

# Remove quotes
text = 
result = text[1:-1]
print(result)  # 'Hello, World!'

# Remove brackets
text = "[1, 2, 3]"
result = text[1:-1]
print(result)  # "1, 2, 3"

لماذا تنجح طريقة [1:-1]:

  • [1:] = من الفهرس 1 حتى النهاية
  • [:-1] = من البداية حتى الفهرس -1 (الحرف الأخير، وهو مستبعد)
  • [1:-1] = من الفهرس 1 حتى الفهرس -1 (غير شامل)، مما يزيل الأول والأخير

المميزات:

  • بأسلوب Python (اصطلاحي)
  • مختصر
  • سريع (عملية أصلية في اللغة)

العيوب:

  • أقل صراحة (قد يربك المبتدئين)

الطريقة الثانية: التقطيع [1:len(text)-1] (صريح)

text = "Hello"
result = text[1:len(text)-1]
print(result)  # "ell"

# Equivalent to [1:-1], but more verbose

المميزات:

  • يوضح صراحة "من 1 إلى الطول - 1"
  • أسهل في الفهم للمبتدئين

العيوب:

  • كتابة أكثر
  • أبطأ (قليلاً — بسبب استدعاء len())
  • ليس أسلوب Python الاصطلاحي

الحالات الاستثنائية: Python

نص فارغ

text = ""
result = text[1:-1]
print(result)  # "" (returns empty string, doesn't error)

حرف واحد

text = "A"
result = text[1:-1]
print(result)  # "" (removes the only character)

حرفان

text = "AB"
result = text[1:-1]
print(result)  # "" (removes both)

ثلاثة أحرف (الحد الأدنى لنتيجة غير فارغة)

text = "ABC"
result = text[1:-1]
print(result)  # "B" (keeps middle character)

سلوك آمن ومتوقع: تقطيع النصوص في Python لا يلقي أخطاءً أبداً عند استخدام فهارس خارج النطاق، بل يعيد ما هو متاح.

طرق JavaScript

const text = "Hello";
const result = text.slice(1, -1);
console.log(result);  // "ell"

// More examples:
console.log("Programming".slice(1, -1));  // "rogrammin"
console.log('"Hello, World!"'.slice(1, -1));  // "Hello, World!"
console.log("[1, 2, 3]".slice(1, -1));  // "1, 2, 3"

لماذا تنجح طريقة .slice(1, -1):

  • المعامل الأول: فهرس البداية (1)
  • المعامل الثاني: فهرس النهاية (غير شامل، -1 تعني الحرف الأخير)
  • الفهارس السالبة تبدأ العد من النهاية

المميزات:

  • تعمل في جميع المتصفحات الحديثة
  • آمنة في الحالات الاستثنائية
  • سهلة القراءة

العيوب:

  • لا توجد فعلياً

الطريقة الثانية: substring(1, length - 1) (أقدم، لكنها متوافقة)

const text = "Hello";
const result = text.substring(1, text.length - 1);
console.log(result);  // "ell"

الاختلافات عن .slice():

  • substring() لا تتعامل مع الفهارس السالبة
  • يجب استخدام .length - 1 صراحة
  • أسلوب أقدم في API

متى تستخدمها: يفضل استخدام .slice() بدلاً منها؛ فهي أبسط ومدعومة بشكل أوسع.

الطريقة الثالثة: substring() مع تبديل المعاملات (مخادعة)

const text = "Hello";

// substring() auto-swaps if start > end, making this work:
const result = text.substring(text.length - 1, 1);
console.log(result);  // "ell" (but not recommended, confusing)

غير موصى بها — تعتمد على سلوك غريب في substring().

الحالات الاستثنائية: JavaScript

نص فارغ

const text = "";
console.log(text.slice(1, -1));  // "" (safe)

حرف واحد

const text = "A";
console.log(text.slice(1, -1));  // "" (removes it)

حرفان

const text = "AB";
console.log(text.slice(1, -1));  // "" (removes both)

ثلاثة أحرف

const text = "ABC";
console.log(text.slice(1, -1));  // "B" (keeps middle)

مقارنة جنباً إلى جنب

المهمة Python JavaScript
أساسي text[1:-1] text.slice(1, -1)
مفصل text[1:len(text)-1] text.substring(1, text.length - 1)
نص فارغ يعيد "" يعيد ""
حرف واحد يعيد "" يعيد ""
سلوك آمن نعم نعم

أمثلة عملية

الحالة 1: إزالة علامات الاقتباس من نصوص تشبه JSON

# Python
json_string = '{"name": "Alice", "age": 30}'
# Remove outer quotes from a value
value = '"Alice"'
clean = value[1:-1]
print(clean)  # Alice
// JavaScript
const jsonString = '{"name": "Alice", "age": 30}';
const value = '"Alice"';
const clean = value.slice(1, -1);
console.log(clean);  // Alice

الحالة 2: إزالة الأقواس

# Python
bracketed = "[192.168.1.1]"
ip = bracketed[1:-1]
print(ip)  # 192.168.1.1

# Remove angle brackets
tagged = "<html>"
content = tagged[1:-1]
print(content)  # html
// JavaScript
const bracketed = "[192.168.1.1]";
const ip = bracketed.slice(1, -1);
console.log(ip);  // 192.168.1.1

const tagged = "<html>";
const content = tagged.slice(1, -1);
console.log(content);  // html

الحالة 3: تخطي السطرين الأول والأخير (نصوص متعددة الأسطر)

# Python
code = """def hello():
    print('Hi')
    return True"""

lines = code.split('\n')
# Keep middle lines only
middle_lines = lines[1:-1]
print('\n'.join(middle_lines))  # "    print('Hi')"
// JavaScript
const code = `def hello():
    print('Hi')
    return True`;

const lines = code.split('\n');
const middleLines = lines.slice(1, -1);
console.log(middleLines.join('\n'));  // "    print('Hi')"

الحالة 4: إزالة الفواصل (المفصولة بخط عمودي)

# Python
pipe_delimited = "|item1|item2|item3|"
items = pipe_delimited[1:-1].split('|')
print(items)  # ['item1', 'item2', 'item3']
// JavaScript
const pipeDelimited = "|item1|item2|item3|";
const items = pipeDelimited.slice(1, -1).split('|');
console.log(items);  // ['item1', 'item2', 'item3']

متقدم: إزالة عدة أحرف من كل طرف

Python: إزالة أول N وآخر M حرف

def remove_ends(text: str, start: int = 1, end: int = 1) -> str:
    """Remove start characters from beginning, end from end"""
    return text[start:-end] if end > 0 else text[start:]

print(remove_ends("Hello, World!", 1, 1))  # "ello, World"
print(remove_ends("Hello, World!", 2, 2))  # "llo, Worl"
print(remove_ends("Hello, World!", 1, 0))  # "ello, World!"

JavaScript: إزالة أول N وآخر M حرف

function removeEnds(text, start = 1, end = 1) {
  if (end === 0) {
    return text.slice(start);
  }
  return text.slice(start, -end);
}

console.log(removeEnds("Hello, World!", 1, 1));  // "ello, World"
console.log(removeEnds("Hello, World!", 2, 2));  // "llo, Worl"
console.log(removeEnds("Hello, World!", 1, 0));  // "ello, World!"

النهج الآمن للأنواع (TypeScript)

function removeEnds(text: string, start: number = 1, end: number = 1): string {
  if (text.length < start + end) {
    return "";
  }
  return text.slice(start, text.length - end);
}

const result: string = removeEnds("Hello");
console.log(result);  // "ell"

مقارنة الأداء

كل من تقطيع Python و JavaScript .slice() يتم تنفيذهما بلغة C/C++، لذا فإن الأداء متطابق للأغراض العملية:

# Python timing (1 million iterations on "Hello, World!")
import timeit

text = "Hello, World!"
print(timeit.timeit(lambda: text[1:-1], number=1_000_000))
# Time: ~0.01 seconds (10 microseconds each)
// JavaScript timing (1 million iterations)
const text = "Hello, World!";
console.time("slice");
for (let i = 0; i < 1_000_000; i++) {
  text.slice(1, -1);
}
console.timeEnd("slice");
// Performance is extremely fast in modern engines

القرار: استخدم الطريقة الاصطلاحية للغتك. كلتا الطريقتين سريعتان بما يكفي لأي حالة استخدام في العالم الحقيقي.

الأخطاء الشائعة

Python: نسيان سلوك الفهرس السالب

text = "Hello"

# WRONG: Using -1 as end, forgetting it means "up to last char"
result = text[1:-1]  # "ell" (correct by accident)

# WRONG: Thinking -1 = "one character from end"
result = text[:-1]  # "Hell" (removes last char, not what you intended)

JavaScript: عدم فهم المعامل الثاني لـ .slice()

const text = "Hello";

// WRONG: Thinking 4 means "4 characters from end"
const result = text.slice(1, 4);  // "ell" (happens to work here)

// WRONG: Using positive index for end when wanting last char
const result2 = text.slice(1, text.length);  // "ello" (keeps last char)

// RIGHT: Use negative index
const result3 = text.slice(1, -1);  // "ell"

البدائل ومتى تستخدمها

عندما تحتاج إلى إزالة مشروطة

# Only remove if string long enough
text = "Hi"
result = text[1:-1] if len(text) > 2 else text
print(result)  # "Hi"

text = "Hello"
result = text[1:-1] if len(text) > 2 else text
print(result)  # "ell"
const text = "Hi";
const result = text.length > 2 ? text.slice(1, -1) : text;
console.log(result);  // "Hi"

عندما تحتاج إلى سلوك مختلف في الحالات الاستثنائية

def safe_remove_ends(text: str) -> str:
    """Remove first/last only if safe"""
    if len(text) <= 2:
        return ""  # Or return text, depends on use case
    return text[1:-1]

print(safe_remove_ends("A"))  # ""
print(safe_remove_ends("AB"))  # ""
print(safe_remove_ends("ABC"))  # "B"

خاتمة

كلا من Python [1:-1] و JavaScript .slice(1, -1) تعتبر طرقاً اصطلاحية، وآمنة، وسريعة. فهي تتعامل مع الحالات الخاصة (edge cases) بسلاسة (حيث تعيد سلاسل نصية فارغة بدلاً من حدوث خطأ). استخدمها بكل ثقة. الخلاصة الأساسية: الفهارس السالبة (negative indices) في كلتا اللغتين قوية وبديهية بمجرد أن تستوعب أن -1 تعني "العنصر الأخير".


نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.